SHOW:
|
|
- or go back to the newest paste.
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 | } |