Ik doe al lange tijd .NET-ontwikkeling en heb onlangs het boek "C# Advanced Programming" gerecenseerd. Ik ontdekte dat veel problemen die ik ooit leek te begrijpen maar niet begreep, langzaam bestudeerd en begrepen kunnen worden.
Dus ben ik van plan om een blogpost te schrijven over de "C# Advanced Programming Series". Het zal putten uit het concept van het boek "C# Advanced Programming" en ook verwijzen naar blogposts van andere experts, ik hoop dat je het begrijpt. Als er iets mis is, corrigeer het dan alsjeblieft.
(Ook: deze blogpost zal de basis van definities en grammatica niet uitleggen.) )
Laten we het hebben over indienststelling.
Delegate wordt veel gebruikt in .NET. Lambda-expressies, gebeurtenissen, anonimiteitsmethoden, enzovoort zullen betrokken zijn (blijf op de hoogte voor volgende blogposts).
Wat is toevertrouwen?
In gewone taal zijn delegates niet anders dan het specificeren van methoden, behalve dat ze het delegate-sleutelwoord moeten specificeren en geen methode-entiteit hebben. Je kunt het zien als een tijdelijke aanduiding, bijvoorbeeld wanneer je code schrijft zonder te weten waar je mee te maken krijgt. Je moet alleen weten wat het parametertype en het uitvoertype zijn dat je gaat introduceren en dat definiëren. Dit is de methode die in het boek wordt overgebracht, namelijk dat de handtekening hetzelfde moet betekenen.
Laten we een basisdelegatie definiëren:
Uitvoeringsresultaten:
Zie je de bovenstaande praktische plek om toe te vertrouwen? NamelijkEen delegate kan elke methode uitvoeren met hetzelfde invoerparametertype en retourtype, of zelfs een methodenwachtrij met dezelfde handtekening.
Moeten onze methodehandtekeningen (dus import- en outputparameters) echt exact hetzelfde zijn als die van de delegate? Antwoord: Nee, we kunnen covariantie en omgekeerde variatie niet negeren. Laten we kort de kennis van covariant en inverter introduceren.
"Covariantie" betekent dat je een type kunt gebruiken dat meer afgeleid is dan het oorspronkelijk gespecificeerde afgeleide type. "Inverter" verwijst naar het vermogen om een type met een kleinere mate van afleiding te gebruiken. Dan is onze commissie ook onderhevig aan covariantie en inverse.
Dit betekent dat als een gedelegeerde wordt gedefinieerd, niet alleen exact dezelfde handtekeningmethode waarde kan toewijzen aan de gedelegeervariabele.
Als de parametertabel van een methode overeenkomt met de delegate-declaratie, maar een afgeleide klasse van retourneert (de delegate-declaratie geeft het type terug), dan kan de methode ook aan deze delegate-variabele worden toegewezen.
Als het retourtype van een methode overeenkomt met de declaratie van de delegate, maar het argument de voorouderklasse is van het type delegate-declaratieparameter, kan de methode ook aan de delegatevariabele worden toegewezen.
Als de parameters en het retourtype van een methode overeenkomen met de aannames in bovenstaande twee regels, kan de methode ook aan de gedelegeerde variabele worden toegewezen.
Het volgende is een eenvoudig voorbeeld van covariant versus inverter:
Covariantie:
Omvormer:
|