Questo articolo è un articolo speculare di traduzione automatica, clicca qui per saltare all'articolo originale.

Vista: 20054|Risposta: 0

[Fonte] Comprendere rapidamente i concetti avanzati di C# (1) Delegare delegati

[Copiato link]
Pubblicato su 19/01/2017 15:18:00 | | | |
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:







Precedente:Progettazione MFC
Prossimo:Come scoprire in quale PID di processo è occupato un file
Disconoscimento:
Tutto il software, i materiali di programmazione o gli articoli pubblicati dalla Code Farmer Network sono destinati esclusivamente all'apprendimento e alla ricerca; I contenuti sopra elencati non devono essere utilizzati per scopi commerciali o illegali, altrimenti gli utenti dovranno sostenere tutte le conseguenze. Le informazioni su questo sito provengono da Internet, e le controversie sul copyright non hanno nulla a che fare con questo sito. Devi eliminare completamente i contenuti sopra elencati dal tuo computer entro 24 ore dal download. Se ti piace il programma, ti preghiamo di supportare software autentico, acquistare la registrazione e ottenere servizi autentici migliori. In caso di violazione, vi preghiamo di contattarci via email.

Mail To:help@itsvse.com