|
|
Opslået på 19/01/2017 15.18.00
|
|
|
|

Jeg har arbejdet med .NET-udvikling i lang tid og har for nylig anmeldt bogen "C# Advanced Programming". Jeg har fundet ud af, at mange problemer, som jeg engang syntes at forstå, men ikke forstod, faktisk langsomt kan studeres og forstås.
Så jeg planlægger at begynde at skrive et blogindlæg om "C# Advanced Programming Series". Den vil trække på konceptet fra bogen "C# Advanced Programming" og vil også referere til blogindlæg fra andre eksperter, som jeg håber, du forstår. Hvis der er noget galt, så ret det venligst.
(Også: Dette blogindlæg vil ikke forklare grundlæggende definitioner og grammatik.) )
Lad os tale om udnævnelse.
Delegate bruges bredt i .NET. Lambda-udtryk, begivenheder, anonymitetsmetoder osv. vil være involveret (følg med for kommende blogindlæg).
Så hvad er tillid?
På almindeligt dansk er delegerede ikke anderledes end at specificere metoder, bortset fra at de skal angive delegerenøgleordet og ikke har nogen metodeenhed. Du kan tænke på det som en pladsholder, for eksempel når du skriver kode uden at vide, hvad du skal håndtere. Du skal bare vide, hvilken parametertype og outputtype, du vil introducere, og definere det. Dette er den metode, der formidles i bogen, at signaturen skal betyde det samme.
Lad os definere en grundlæggende delegation:
Udførelsesresultater:
Ser du det ovenstående praktiske sted at betro? NemligEn delegeret kan udføre enhver metode med samme indtastningsparametertype og returtype, eller endda en metodekø med samme signatur.
Så skal vores metodesignaturer (dvs. import- og outputparametre) virkelig være præcis de samme som delegaten? Svar: Nej, vi kan ikke ignorere kovarians og invers variation. Lad os kort introducere viden om kovariant og inverter.
"Kovarians" betyder at kunne bruge en type, der er mere afledt end den oprindeligt specificerede afledte type. "Inverter" refererer til evnen til at bruge en type med en mindre grad af afledning. Derefter er vores kommission også underlagt kovarians og invers.
Det betyder, at hvis en delegeret er defineret, kan ikke kun den nøjagtig samme signaturmetode tildele værdi til delegeretvariablen.
Hvis en metodes parametertabel matcher delegatdeklarationen, men returnerer en afledt klasse af (delegatdeklarationen returnerer typen), kan metoden også tildeles denne delegatvariabel.
Hvis returtypen for en metode matcher delegatens deklaration, men argumentet er forfaderklassen for delegatdeklarationsparametertypen, kan metoden også tildeles delegatvariablen.
Hvis parametrene og returtypen for en metode matcher antagelserne i de to ovenstående linjer, kan metoden også tildeles delegerede variable.
Følgende er et simpelt eksempel på kovariant vs. inverter:
Kovarians:
Inverter:
|
Tidligere:MFC-designNæste:Hvordan finder man ud af, hvilken proces-PID en fil er optaget
|