Advertisement
Guest User

Untitled

a guest
Apr 12th, 2014
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. using System;
  2. class Program
  3. {
  4. // 5) Ez lesz az eseménykezelőd. Mint látható, megfelel az EventHandlerDelegate-nek: void metódus egy string paraméterrel.
  5.  static public void Handler(string message)
  6.  {
  7.  Console.WriteLine(message);
  8.  }
  9.  
  10.  static void Main(string[] args)
  11.  {
  12.  Test t = new Test();
  13.  
  14.  // 6) Ez itt a feliratkozás. Az eventen hívott += feliratja a metódust, leiratkozni meg a -= operátorral lehetne.
  15.  t.TestStatusChange += Program.Handler;
  16.  
  17.  // 7) amikor ezt meghívod, meghívódik a Test.Data setter. Annak a végén van a privát metódushívás, ami ellövi az eseményt -> meghívja az előbb feliratkozott Handler metódust -> megjelenik a konzolon a szöveg.
  18.  t.Data = 11;
  19.  
  20.  Console.ReadKey();
  21.  }
  22. }
  23.  
  24. class Test
  25. {
  26.     // 2) ez a delegate írja le, hogy az eseményre milyen paramétereket váró metódusok iratkozhatnak fel. Jelen esetben egy string paramétert kell fogadniuk, az üzenetet.
  27.     public delegate void EventHandlerDelegate(string message);
  28.  
  29.     // 1) ez itt az esemény deklarációja: a Test példányok küldhetnek TestStatusChange üzeneteket, amire olyan metódusok iratkozhatnak fel, amik illeszkednek az EventHandlerDelegate mintájára.
  30.     public event EventHandlerDelegate TestStatusChange;
  31.  
  32.     private int data = 10;
  33.     public int Data
  34.     {
  35.         get { return data; }
  36.         set
  37.         {
  38.             data = value;
  39.             this.OnStatusChange();
  40.         }
  41.     }
  42.  
  43.     private void OnStatusChange()
  44.     {
  45.         // 3) Ez itt majdnem olyan, mint egy szabályos eseményküldés, de egy kicsit sántít. Majd a topikban leírom helyesen.
  46.         // A null ellenőrzés azért kell, mert ha senki se iratkozott fel az eseményre, a küldés NullReferenceExceptiont eredményezne.
  47.         if (TestStatusChange != null)
  48.         {
  49.             4) Ez itt az eseményküldés: pont úgy néz ki, mint egy metódushívás. Minden metódus, ami fel van rá iratkozva, meghívódik az itt megadott paraméterrel.
  50.             TestStatusChange("Az osztály állapota megváltozott!");
  51.         }
  52.     }
  53. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement