C#-ban az eventeknél miért mindig sima EventArgs típus van megadva az "e"-nek, miért nem az eventre vonatkozó pl. MouseEventArgs?
Pl. ha van egy eljárásom, ami egy gomb Click eventjéhez van rendelve, akkor a Visual Studio automatikusan olyan eljárást ír a forrásba, melynek az "e" paramétere EventArgs. Ezt nekem konvertálni kell MouseEventArgs-zá, ha használni szeretném a klikkről kapott infót.
MouseEventArgs ee = (MouseEventArgs)e;
Úgy látszik, a Click event EventHandlert "fogad el", és MouseEventHandlert nem. De miért? :\
Ismerős az a fogalom, hogy öröklődés? Az OOP egyik alapköve, és ebben a fajta megvalósításban a függvényparamétereknek meg kell egyezniük az ősben és a leszármazottban ahhoz, hogy az a függvény dinamikusan kötődhessen. És ezek az eseménykezelők ezek dinamikus függvények, mert van a háttérben egy osztályhierarchia.
Képzeld el, hogy van egy A osztályod, és van egy B, ami leszármazik az A-ból.
Az A osztálynak van egy metódusa, ami EventArgsot fogad el, és a B leszármazottban ezt úgy írnád felül, hogy MouseEventArgsot fogadjon el. Ekkor egy A referencián keresztül elért B objektumnak át lehetne adni egy olyan EventArgs referenciát, ami nem MouseEventArgs típusú objektumra mutat, és a fordító SEMMIT nem tudna tenni, hogy ezt ellenőrizze.
Kapcsolódó kérdések:
Minden jog fenntartva © 2025, 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!