1.2. fejezet, Delegate és Event
Beküldte pzoli - 2013, június 12 - 8:22du
A delegate olyan típus, amely egy vagy több metódusra hivatkozik.
delegate int TestDelegate(int x); static public int Pow(int x) { return (x * x); } TestDelegate dlgt = Pow; int result = dlgt(10);
Az event egy érték megváltozásakor hívódik meg:
class EventTest { public delegate void EventHandlerDelegate(string message); public event EventHandlerDelegate TestStatusChange; public event EventHandlerDelegate BeforeStatusChange; private int data = 10; public int Data { get { return data; } set { this.OnBeforeChange(); data = value; this.OnStatusChange(); } } private void OnBeforeChange() { if (BeforeStatusChange != null) { BeforeStatusChange("régi érték:" + data); } } private void OnStatusChange() { if (TestStatusChange != null) { TestStatusChange("Az osztály állapota megváltozott! Új érték: "+data); } } }
static public void Handler(string message) { Console.WriteLine(message); } static public void ProcessNew(string message) { Console.Out.WriteLine("Process message: {0}", message); } static public void BeforeChangeHandler(string message) { Console.Out.WriteLine(message); } static public void Events() { Console.WriteLine("=================== Events ==================="); EventTest t = new EventTest(); t.BeforeStatusChange += BeforeChangeHandler; t.TestStatusChange += Handler; t.TestStatusChange += ProcessNew; t.Data = 15; }
Az esemény tulajdonképpen egy speciális delegate. Három dologban különbözik attól:
- Esemény lehet része interfésznek, míg delegate nem.
- Egy eseményt csakis az az osztály „hívhatja” meg, amely deklarálta.
- Egy esemény rendelkezik add és remove "metódusokkal", amelyek felülbírálhatóak.
- A hozzászóláshoz be kell jelentkezni