Faccio sviluppo .NET da molto tempo e recentemente ho recensito il libro "C# Advanced Programming". Ho scoperto che molti problemi che una volta sembravo capire ma non capivo possono essere studiati e compresi lentamente.
Quindi, ho intenzione di iniziare a scrivere un post sul blog della "C# Advanced Programming Series". Si ispirerà al concetto del libro "C# Advanced Programming" e farà anche riferimento ai post di altri esperti che spero tu abbia capito. Se c'è qualcosa che non va, per favore correggilo.
(Inoltre: questo post sul blog non spiegherà le basi delle definizioni e della grammatica.) )
Parliamo della commissione.
Delegate è ampiamente utilizzato in .NET. Saranno coinvolti espressioni lambda, eventi, metodi di anonimato, ecc. (restate sintonizzati per i prossimi post sul blog).
Quindi cos'è l'entrustment?
In termini semplici, i delegati non differiscono dai metodi specificatori, tranne che devono specificare la parola chiave delegate e non hanno entità metodo. Puoi pensare a questo come a un segnaposto, ad esempio, quando scrivi codice senza sapere con cosa ti aspetta. Devi solo sapere quali sono i tipi di parametro e di output che vuoi inserire e definirli. Questo è il metodo trasmesso nel libro secondo cui la firma deve significare lo stesso.
Definiamo una delega di base:
Risultati dell'esecuzione:
Vedi il luogo pratico sopra in cui affidarsi? OvveroUn delegato può eseguire qualsiasi metodo con lo stesso tipo di parametro di ingestione e tipo di ritorno, oppure anche una coda di metodo con la stessa firma.
Quindi, le nostre firme di metodo (cioè parametri di importazione e output) devono davvero essere esattamente uguali a quelle del delegato? Risposta: No, non possiamo ignorare la covarianza e la variazione inversa. Introduciamo brevemente la conoscenza di covariante e inverter.
"Covarianza" significa essere in grado di utilizzare un tipo più derivato rispetto al tipo originariamente specificato. "Inverter" si riferisce alla capacità di utilizzare un tipo con un grado di derivazione minore. Poi, anche la nostra commissione è soggetta a covarianza e inverso.
Ciò significa che se un delegato è definito, non solo lo stesso metodo di firma può assegnare valore alla variabile delegata.
Se la tabella dei parametri di un metodo corrisponde alla dichiarazione del delegato, ma restituisce una classe derivata di (la dichiarazione del delegato restituisce il tipo), allora il metodo può essere assegnato anche a questa variabile del delegato.
Se il tipo di ritorno di un metodo corrisponde alla dichiarazione del delegato, ma l'argomento è la classe antenata del tipo di parametro di dichiarazione del delegato, allora il metodo può essere assegnato anche alla variabile delegata.
Se i parametri e il tipo di ritorno di un metodo corrispondono alle assunzioni delle due righe sopra, allora il metodo può essere assegnato anche alla variabile delegata.
Di seguito è riportato un semplice esempio di covariante vs. inverter:
Covarianza:
Invertitore:
|