|
|
Zveřejněno 19.01.2017 15:18:00
|
|
|
|

Vývoj pro .NET dělám už dlouho a nedávno jsem recenzoval knihu "C# Advanced Programming". Zjistil jsem, že mnoho problémů, kterým jsem dříve rozuměl, ale nerozuměl jim, lze ve skutečnosti pomalu studovat a chápat.
Takže plánuji začít psát blogový příspěvek o "Sérii pokročilého programování v C#". Bude čerpat z konceptu knihy "C# Advanced Programming" a také odkazovat na blogové příspěvky jiných odborníků, doufám, že tomu rozumíte. Pokud je něco špatně, prosím opravte to.
(Také: Tento blogový příspěvek nevysvětlí základy definic a gramatiky.) )
Pojďme si promluvit o uvedení do služby.
Delegate je široce používán v .NET. Budou zapojeny lambda výrazy, akce, metody anonymity atd. (sledujte další blogové příspěvky).
Co tedy znamená svěřování?
Laicky řečeno, delegáti se neliší od specifikujících metod, kromě toho, že musí specifikovat klíčové slovo delegáta a nemají žádnou entitu metody. Můžete si to představit jako zástupný kód, například když píšete kód, aniž byste věděli, s čím budete pracovat. Stačí jen vědět, jaký typ parametru a výstupu zavedete, a definovat ho. To je metoda, kterou kniha uvádí, že podpis musí znamenat totéž.
Definujme základní delegaci:
Výsledky provedení:
Vidíte výše uvedené praktické místo pro důvěru? KonkrétněDelegát může spustit jakoukoli metodu se stejným typem parametru ingestu a typem returnu, nebo dokonce frontu metod se stejným podpisem.
Musí tedy naše podpisy metod (tj. importní a výstupní parametry) opravdu být přesně stejné jako u delegáta? Odpověď: Ne, nemůžeme ignorovat kovarianci a inverzní variaci. Pojďme stručně představit znalosti kovariantu a invertoru.
"Kovariance" znamená schopnost použít typ, který je více odvozený než původně specifikovaný odvozený typ. "Měnič" označuje schopnost použít typ s menším stupněm odvození. Pak je naše komise také podřízena kovarianci a inverzní verzi.
To znamená, že pokud je definován delegát, může pouze stejná metoda podpisu přiřadit hodnotu této proměnné.
Pokud tabulka parametrů metody odpovídá deklaraci delegáta, ale vrací odvozenou třídu (deklarace delegátu vrací typ), pak lze metodu také přiřadit této delegátní proměnné.
Pokud typ návratu metody odpovídá deklaraci delegáta, ale argument je třídou předka typu parametru deklarace delegáta, pak lze metodu také přiřadit k proměnné delegáta.
Pokud parametry a typ návratu metody odpovídají předpokladům v uvedených dvou řádcích, lze metodu také přiřadit k delegátní proměnné.
Následuje jednoduchý příklad kovariantního versus invertoru:
Kovariance:
Měnič:
|
Předchozí:Konstrukce MFCDalší:Jak zjistit, který proces PID je soubor obsazen
|