Meghatalmazottak (C# programozási útmutató)
A meghatalmazott olyan típus, amely egy adott paraméterlistával és visszatérési típussal rendelkező metódusokra mutató hivatkozásokat jelöl. Amikor példányosít egy meghatalmazottat, annak példányát bármely, kompatibilis aláírással és visszatérési típussal rendelkező metódushoz társíthatja. A metódust meghívhatja (vagy meghívhatja) a delegált példányon keresztül.
A meghatalmazottak metódusokat adnak át argumentumként más metódusoknak. Az eseménykezelők nem más, mint a meghatalmazottakon keresztül meghívott metódusok. Létrehozhat egy egyéni metódust, és egy osztály, például egy Windows-vezérlő meghívhatja a metódust egy bizonyos esemény bekövetkezésekor. Az alábbi példa egy deklarációt mutat be:
public delegate int PerformCalculation(int x, int y);
Bármely, a delegált típusnak megfelelő, akadálymentes osztályból vagy szerkezetből származó metódus hozzárendelhető a delegálthoz. A metódus lehet statikus vagy példánymetódus. Ez a rugalmasság azt jelenti, hogy programozott módon módosíthatja a metódushívásokat, vagy új kódot csatlakoztathat a meglévő osztályokhoz.
Megjegyzés
A metódus túlterhelése esetén a metódus aláírása nem tartalmazza a visszatérési értéket. De a meghatalmazottak kontextusában az aláírás tartalmazza a visszatérési értéket. Más szóval egy metódus visszatérési típusának meg kell egyeznie a delegált típusával.
A metódusok paraméterként való hivatkozásának képessége ideálissá teszi a delegáltakat a visszahívási metódusok meghatározásához. Megírhat egy metódust, amely két objektumot hasonlít össze az alkalmazásban. Ez a metódus használható a delegáltakban a rendezési algoritmusokhoz. Mivel az összehasonlító kód elkülönül a kódtártól, a rendezési módszer általánosabb lehet.
A C# 9-hez hasonló helyzetekben függvénymutatókat adtunk hozzá, ahol nagyobb mértékű vezérlésre van szükség a hívási konvenció felett. A delegálthoz társított kód meghívása egy delegálttípushoz hozzáadott virtuális módszerrel történik. Függvénymutatók használatával különböző konvenciók határozhatók meg.
Meghatalmazottak áttekintése
A meghatalmazottak a következő tulajdonságokkal rendelkeznek:
- A meghatalmazottak hasonlóak a C++ függvénymutatókhoz, de a meghatalmazottak teljesen objektumorientáltak, és a C++ tagfüggvényekre mutató mutatókkal ellentétben a meghatalmazottak egy objektumpéldányt és egy metódust is beágyaznak.
- A meghatalmazottak lehetővé teszik a metódusok paraméterként való átadását.
- A meghatalmazottak visszahívási módszerek meghatározására használhatók.
- A meghatalmazottak összefűzhetők; Egy eseményen például több metódus is meghívható.
- A metódusoknak nem kell pontosan megegyeznie a delegált típusával. További információ: Variancia használata a meghatalmazottakban.
- A Lambda-kifejezések a beágyazott kódblokkok írásának tömörebb módjai. A Lambda-kifejezések (bizonyos kontextusokban) delegált típusokra vannak lefordítva. További információ a lambda kifejezésekről: Lambda-kifejezések.
A szakasz tartalma
- Meghatalmazottak használata
- Mikor érdemes delegáltakat használni interfészek helyett (C# programozási útmutató)
- Elnevezett és névtelen metódusokkal rendelkező meghatalmazottak
- Variancia használata a meghatalmazottakban
- Meghatalmazottak egyesítése (csoportos küldésű meghatalmazottak)
- Meghatalmazott deklarálása, példányosítása és használata
C# nyelvspecifikáció
További információ: Meghatalmazottak a C# nyelv specifikációjában. A nyelvi specifikáció a C#-szintaxis és -használat végleges forrása.
Kiemelt könyv fejezetek
- Delegates, Events, and Lambda Expressions in C# 3.0 Cookbook, Third Edition: Több mint 250 megoldás C# 3.0 programozók számára
- A C# 3.0 Tanulás delegáltjai és eseményei: A C# 3.0 alapjai