Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- class Program
- {
- // 5) Ez lesz az eseménykezelőd. Mint látható, megfelel az EventHandlerDelegate-nek: void metódus egy string paraméterrel.
- static public void Handler(string message)
- {
- Console.WriteLine(message);
- }
- static void Main(string[] args)
- {
- Test t = new Test();
- // 6) Ez itt a feliratkozás. Az eventen hívott += feliratja a metódust, leiratkozni meg a -= operátorral lehetne.
- t.TestStatusChange += Program.Handler;
- // 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.
- t.Data = 11;
- Console.ReadKey();
- }
- }
- class Test
- {
- // 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.
- public delegate void EventHandlerDelegate(string message);
- // 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.
- public event EventHandlerDelegate TestStatusChange;
- private int data = 10;
- public int Data
- {
- get { return data; }
- set
- {
- data = value;
- this.OnStatusChange();
- }
- }
- private void OnStatusChange()
- {
- // 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.
- // A null ellenőrzés azért kell, mert ha senki se iratkozott fel az eseményre, a küldés NullReferenceExceptiont eredményezne.
- if (TestStatusChange != null)
- {
- 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.
- TestStatusChange("Az osztály állapota megváltozott!");
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement