View difference between Paste ID: Bjf1hgXH and gfUmkMbr
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
}