Eseménykezelés C#-ban delegálttal, hogyan kell csinálni?
Van négy különböző metódusom, eltérő osztályokban.
Azt szeretném, hogy ha valamelyik dolgozik egy objektummal, akkor egy ötödik, naplózó metódus objektumként kapja meg az adott objektumot + hogy mi történt vele (enummal kifejezve), és ezt fonja be egy láncolt listába.
Ezt kéne eseménykezeléssel megoldani, csak még mindig igazán tudom/értem, hogy ez hogy működik, hogy kell deklarálni a delegáltat, hol az eventet, hol kell példányosítani, ki mit ad át kinek, stb.
Valaki felvázolná nekem?
Csillió helyen le van írva a neten.
Mi a szarnak leírna 28 milliomodjára is?
Az esemény a programozásban azt jelenti, hogy x osztály kiszól a világba, hogy történt vele valami. Pl. ha rákattintasz egy gombra, akkor az a háttérben egy eseményt csattint el. Az esemény egy delegált, tehát egy olyan változó, ami függvényt tárol el. Az esemény - mint függvény - két paraméterű, az első az object sender, ami az az objektum, ami elcsattintotta az eseményt, és az EventArgs e, ami az EventArgs-ból származó tetszőleges osztály lehet, és az esemény paramétereit tartalmazza. Esetedben az enumot. Amikor belépsz a függvénybe, elcsattintod az eventet, úgy, hogy MethodCalled?.Invoke(this, new MethodCalledEventArgs() {EnumValue = MyEnum.DesiredValue});
Hogy ennek legyen hatása, az objektum megalkotása után, de a metódus meghívása előtt a loggernek fel kell íratkozni rá:
var log = new ErrorLogger();
var obj = new MyObject();
obj.MethodCalled += log.HandleMethodCalled;
obj.Method();
ahol a log.HandleMethodCalled egy metódus (nem kell publikusnak lennie, sőt!), ami void visszatérési értékű, és van egy object sender, és egy EventArgs e paramétere. Ha elcsattan az event, akkor ez háttérszálon meghívódik, és a logger osztályodban láncolt listázol. A láncolt lista megvalósítását vettétek előadáson és gyakorlaton is.
További kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!