Zdarzenia i delegaty

0

Ćwiczę te delegaty i zdarzenia ale wciąż nie mogę zrozumieć idei ;/
Proszę spojrzeć.
Kod 1: Zdarzenia

using System;

namespace Sample
{
   public class SimpleMath
   {
      public delegate void MathDelegate(string msg);
      public event MathDelegate ZadanieSkonczone;

      public int Add(params int[] T)
      {
         int temp = 0;
         for(int i = 0; i < T.Length; i++)
            temp += T[i];
         this.ZadanieSkonczone("Dodawanie skończone");
         return temp;
      }

      public int Subtract(params int[] T)
      {
         int temp = 0;
         foreach (var i in T)
            temp += i;
         this.ZadanieSkonczone("Odejmowanie skończone");
         return temp;
      }
   }

   public class App
   {
      static void Main()
      {
         SimpleMath sm = new SimpleMath();
         sm.ZadanieSkonczone += sm_ZadanieSkonczone;
         Console.WriteLine("Dodawanie: {0}", sm.Add(1, 2, 3, 4, 5, 6, 7, 8, 9, 1));
         Console.WriteLine("Odejmowanie: {0}", sm.Subtract(1, 2, 3, 4, 5, 6, 7, 8, 9, 1));

         Console.ReadKey(true);
      }

      static void sm_ZadanieSkonczone(string msg)
      {
         Console.WriteLine(msg);
      }
   }
}

Kod 2: Bez zdarzeń

using System;

namespace Sample
{
   public class SimpleMath
   {

      public int Add(params int[] T)
      {
         int temp = 0;
         for(int i = 0; i < T.Length; i++)
            temp += T[i];
         this.ZadanieSkonczone("Dodawanie skończone");
         return temp;
      }

      public int Subtract(params int[] T)
      {
         int temp = 0;
         foreach (var i in T)
            temp += i;
         this.ZadanieSkonczone("Odejmowanie skończone");
         return temp;
      }
      public void ZadanieSkonczone(string msg)
      {
         Console.WriteLine(msg);
      }
   }

   public class App
   {
      static void Main()
      {
         SimpleMath sm = new SimpleMath();

         Console.WriteLine("Dodawanie: {0}", sm.Add(1, 2, 3, 4, 5, 6, 7, 8, 9, 1));
         Console.WriteLine("Odejmowanie: {0}", sm.Subtract(1, 2, 3, 4, 5, 6, 7, 8, 9, 1));

         Console.ReadKey(true);
      }
   }
}

Czyż nie jest to prostsze? Dlaczego niby inne obiekty powinny mieć dostęp do takich zdarzeń?

0

W drugim przypadku masz wszystko wbite na sztywno. Metody zliczają, co mają zliczyć i wypisują coś tam na konsoli. W pierwszym przypadku masz pełną elastyczność, możesz sobie podpiąć (lub odpiąć) pod zdarzenie dynamicznie dowolną metodę (np. zalogowanie jakiejś wiadomości, uruchomienie jakiegoś mechanizmu, cokolwiek). Sam obiekt mówi tylko: "hej, nastąpiło zdarzenie!", a całe otoczenie może to zobaczyć i wykonać w związku z tym własną akcję. To jest na marginesie wzorzec "obserwator".

1 użytkowników online, w tym zalogowanych: 0, gości: 1