Régóta dolgozom .NET fejlesztéssel, és nemrég értékeltem a "C# Advanced Programming" című könyvet. Azt tapasztaltam, hogy sok olyan problémát, amit korábban megértettem, de nem értettem, valójában lassan tanulmányozható és megérthető lehet.
Ezért tervezem, hogy elkezdek blogbejegyzést írni a "C# Advanced Programming Series"-ről. A "C# Advanced Programming" című könyv koncepciójára támaszkodni fog, és más szakértők blogbejegyzéseire is hivatkozni fog – remélem, megértitek. Ha valami nincs rendben, kérlek, javítsd ki.
(Továbbá: Ez a blogbejegyzés nem magyarázza el a definíciók és a nyelvtani alapjait.) )
Beszéljünk a hadviselésről.
A Delegate széles körben használatos a .NET-ben. Lambda kifejezések, események, anonimitási módszerek stb. is részt vesznek (maradjatok velünk a következő blogbejegyzésekért).
Mi is az a bízás?
Egyszerű értelemben a delegáltak nem különböznek a metódusok megjelölésétől, kivéve, hogy meg kell határozniuk a delegált kulcsszót, és nincs metódusentitásuk. Gondolhatsz rá úgy, mint egy helykitöltőre, például amikor kódot írsz anélkül, hogy tudnád, mivel fogsz foglalkozni. Csak tudni kell, hogy milyen paraméter- és kimenettípus lesz, és definiálnod ezt. Ez az a módszer, amely a könyvben közvetíti, hogy az aláírásnak ugyanazt kell jelentenie.
Definiáljunk egy alapvető delegációt:
Végrehajtási eredmények:
Látod a fent említett praktikus helyet, ahol a bízásban lehetsz bízni? NevezetesenEgy delegált bármilyen olyan metódust végrehajthat, amelynek ugyanaz a felvételi paraméter típusa és a visszatérési típusa, vagy akár egy metódussorba hasonló aláírással.
Tehát tényleg pontosan ugyanazoknak kell lenniük a metódus aláírásainknak (azaz import- és kimeneti paramétereknek) ugyanazoknak, mint a delegáltnak? Válasz: Nem, nem hagyhatjuk figyelmen kívül a kovarianciát és az inverz variációt. Röviden mutassuk be a kovariáns és inverter ismereteit.
A "kovariancia" azt jelenti, hogy olyan típust használhatunk, amely inkább származott, mint az eredetileg meghatározott eredeti. Az "inverter" azt jelenti, hogy egy kisebb származtatású típust lehet használni. Ekkor a mi bizottságunk is kovariancia és inverz hatású.
Ez azt jelenti, hogy ha egy delegált definiálva van meg, nemcsak ugyanaz az aláírási módszer rendelhet értéket a delegált változóhoz.
Ha egy metódus paramétertáblázata megegyezik a delegált deklarációval, de egy származtatott osztályt ad vissza (a delegált deklaráció adja a típust), akkor a metódus is hozzárendelhető ehhez a delegált változóhoz.
Ha egy metódus visszaküldési típusa megegyezik a delegált deklarációjával, de az érv a delegált deklarációs paramétertípus elős osztálya, akkor a metódus is hozzárendelhető a delegált változóhoz.
Ha a metódus paraméterei és visszaküldési típusa megegyezik a fenti két sorban szereplő feltételezésekkel, akkor a metódus a delegált változóhoz is rendelhető.
Az alábbiakban egy egyszerű példa a kovariáns és inverter közötti különbségekre:
Kovariancia:
Inverter:
|