C# nyelv eseményeit tanulom egy könyvből de nem bírom megérteni, átlátni mire is jók és a használatuk módját sem értem elmagyaráznád?
Nem megy a fejembe. :(
Az esemény az egy delegált?
ugyan nem értek a C#-hoz, de az eseményeket általában pl. felhasználó felületeknél alkalmazzák
pl. amikor megnyomsz egy ablakban egy gombot, az egy eseményt indít el, így vezérli a júzer a programott
Az eseményvezérelt progik valamilyen eseményre képesek reagálni. Ez lehet egy kattintás egy gombon, vagy billentyű leütés, időzítő jele, ablak bezárás, stb.
Namost ez úgy működik, hogy amikor egy ilyen esemény történik, azt az operációs rendszer észleli először. (A program ablakát alapvetően az oprendszer kezeli.) Ekkor az op.rendszer (pl. Win) küld egy üzenetet a proginak, hogy ilyen és ilyen esemény történt. Ezt a progi "elkapja" és ilyenkor meghívhat egy függvényt (vagy metódust).
A C#-ban (is) az események valójában előre definiált metódusok, amik adott esemény bekövetkezésekor elkezdenek futni. Tehát nem te hívod meg őket, hanem a program azon része, ami az eseményeket (op.rendszer üzeneteket) figyeli. Ha ide beírsz egy kódot, akkor az adott esemény után le fog futni, nem kell neked külön meghivogatni.
Akkor a C# eseménykezeléséről:
Egy esemény bekövetkezésekor C# nyelvben egy metódus fog lefutni. Először azt kell meghatározni, hogy ehhez az eseményhez milyen alakú metódusok rendelhetők hozzá. Ehhez kell nekünk egy ún. delegate.
delegate void MyEventHandler();
Ezzel azt határoztam meg, hogy az eseményemhez majd olyan metódusokat lehet hozzárendelni, aminek nincs paramétere és nincs visszatérési értéke.
Ezt követően az osztályon belül létre kell hoznom magát az eseményt.
class Foo {
public MyEventHandler OnFoo;
}
Ezzel létrehoztam a tényleges, létező eseményt, ami a MyEventHandler delegate által meghatározott metódusokat fogadhat el. Aztán ezt az eseményt így tudom kiváltani:
class Foo {
public MyEventHandler OnFoo;
public void DoSomething() {
if (this.OnFoo != null) {
this.OnFoo();
}
}
}
Először is azt kell ellenőriznem, hogy egyáltalán van-e eseménykezelő metódus hozzárendelve az eseményhez. Ha igen, akkor ezt az eseményt, mint egy metódust, meg tudom hívni. A paramétereknek meg kell egyezniük a delegate-ben meghatározottakkal.
Aztán, hogy erre az eseményre hogyan tudok feliratkozni:
class Program {
public static void Main(string[] args) {
Foo f = new Foo();
f.OnFoo += new MyEventHandler(Handler); //Feliratkozás az eseményre
f.DoSomething();
}
public static void Handler() {
Console.WriteLine("Esemény lekezelve");
}
}
Kis javítás:
class Foo {
public event MyEventHandler OnFoo;
Kapcsolódó 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!