|
|
Zverejnené 19. 1. 2017 15:18:00
|
|
|
|

Dlhodobo sa venujem vývoju .NET a nedávno som recenzoval knihu "C# Advanced Programming". Zistil som, že mnohé problémy, ktorým som kedysi rozumel, ale nerozumel som, sa dajú vlastne pomaly študovať a chápať.
Takže plánujem začať písať blogový príspevok o "C# Advanced Programming Series". Bude čerpať z konceptu knihy "C# Advanced Programming" a tiež odkazovať na blogové príspevky iných odborníkov, dúfam, že rozumiete. Ak je niečo zle, prosím, opravte to.
(Tiež: Tento blogový príspevok nevysvetľuje základy definícií a gramatiky.) )
Poďme sa porozprávať o zaradení do služby.
Delegate sa široko používa v .NET. Budú zapojené lambda výrazy, podujatia, metódy anonymity a podobne (sledujte ďalšie blogové príspevky).
Čo teda znamená zverenie?
Laicky povedané, delegáti sa nelíšia od špecifikujúcich metód, okrem toho, že musia špecifikovať kľúčové slovo delegáta a nemajú žiadnu entitu metódy. Môžete si to predstaviť ako dočasný kód, napríklad keď píšete kód bez toho, aby ste vedeli, s čím budete pracovať. Stačí vedieť, aký parameter a výstupný typ zavádzate, a definovať ho. Toto je spôsob, ktorý kniha uvádza, že podpis musí znamenať to isté.
Definujme základnú delegáciu:
Výsledky realizácie:
Vidíte vyššie uvedené praktické miesto na zverenie? KonkrétneDelegát môže vykonať akúkoľvek metódu s rovnakým typom parametra príjmu a typom návratu, alebo dokonca frontu metód s rovnakým podpisom.
Takže musia byť naše podpisy metód (t.j. importné a výstupné parametre) naozaj úplne rovnaké ako u delegáta? Odpoveď: Nie, nemôžeme ignorovať kovarianciu a inverznú variáciu. Stručne si predstavme poznanie kovariantu a invertora.
"Kovariancia" znamená schopnosť použiť typ, ktorý je viac odvodený než pôvodne špecifikovaný odvodený typ. "Menič" označuje schopnosť použiť typ s menším stupňom odvodenia. Potom je naša komisia tiež podlieha kovariancii a inverznej hodnote.
To znamená, že ak je definovaný delegát, nielenže presne tá istá metóda podpisu môže priradiť hodnotu delegátnej premennej.
Ak tabuľka parametrov metódy zodpovedá deklarácii delegáta, ale vracia odvodenú triedu (deklarácia delegátu vracia typ), potom metóda môže byť tiež priradená k tejto delegátnej premennej.
Ak typ návratu metódy zodpovedá deklarácii delegáta, ale argument je triedou predka typu parametra deklarácie delegáta, potom môže byť metóda tiež priradená k premennej delegáta.
Ak parametre a typ návratu metódy zodpovedajú predpokladom v uvedených dvoch riadkoch, metóda môže byť tiež priradená k delegátnej premennej.
Nasleduje jednoduchý príklad kovariantného verzus meniča:
Kovariancia:
Menič:
|
Predchádzajúci:MFC dizajnBudúci:Ako zistiť, ktorý procesný PID súbor obsadí
|