C# LanguageMetodi di estensione


Sintassi

  • public static ReturnType MyExtensionMethod (target TargetType)
  • public static ReturnType MyExtensionMethod (target TargetType, TArg1 arg1, ...)

Parametri

Parametro Dettagli
Questo Il primo parametro di un metodo di estensione deve essere sempre preceduta dalla this parola chiave, seguita dal identificativo con cui fare riferimento all'istanza "corrente" dell'oggetto che si sta estendendo

Osservazioni

I metodi di estensione sono zucchero sintattico che consente di invocare metodi statici su istanze di oggetti come se fossero membri del tipo stesso.

I metodi di estensione richiedono un oggetto target esplicito. Sarà necessario utilizzare this parola chiave per accedere al metodo all'interno del tipo esteso stesso.

I metodi di estensione devono essere dichiarati statici e devono vivere in una classe statica.

Quale spazio dei nomi?

La scelta dello spazio dei nomi per la classe del metodo di estensione è un compromesso tra visibilità e rilevabilità.

L' opzione più comunemente citata è quella di avere uno spazio dei nomi personalizzato per i metodi di estensione. Tuttavia ciò comporterà uno sforzo di comunicazione in modo che gli utenti del tuo codice sappiano che esistono i metodi di estensione e dove trovarli.

Un'alternativa è scegliere uno spazio dei nomi in modo tale che gli sviluppatori scoprano i metodi di estensione tramite Intellisense. Quindi, se si desidera estendere la classe Foo , è logico inserire i metodi di estensione nello stesso spazio dei nomi di Foo .

È importante rendersi conto che nulla impedisce di utilizzare lo spazio dei nomi di "qualcun altro" : quindi se si desidera estendere IEnumerable , è possibile aggiungere il proprio metodo di estensione nello spazio System.Linq nomi System.Linq .

Questa non è sempre una buona idea. Ad esempio, in un caso specifico, potresti voler estendere un tipo comune ( bool IsApproxEqualTo(this double value, double other) per esempio), ma non avere quel 'inquinante' l'intero System . In questo caso è preferibile scegliere un namespace locale, specifico.

Infine, è anche possibile inserire i metodi di estensione in nessuno spazio dei nomi !

Una buona domanda di riferimento: come gestisci gli spazi dei nomi dei tuoi metodi di estensione?

applicabilità

Bisogna fare attenzione quando si creano metodi di estensione per assicurarsi che siano appropriati per tutti i possibili input e non siano solo rilevanti per situazioni specifiche. Ad esempio, è possibile estendere classi di sistema come la string , che rende il nuovo codice disponibile per qualsiasi stringa. Se il codice deve eseguire una logica specifica del dominio su un formato stringa specifico del dominio, un metodo di estensione non sarebbe appropriato in quanto la sua presenza confonderebbe i chiamanti che lavorano con altre stringhe nel sistema.

Il seguente elenco contiene le funzionalità e le proprietà di base dei metodi di estensione

  1. Deve essere un metodo statico.
  2. Deve essere posizionato in una classe statica.
  3. Utilizza la parola chiave "this" come primo parametro con un tipo in .NET e questo metodo verrà chiamato da una determinata istanza di tipo sul lato client.
  4. E 'anche mostrato da VS intellisense. Quando premiamo il punto . dopo un'istanza di tipo, allora è disponibile in VS intellisense.
  5. Un metodo di estensione deve essere nello stesso spazio dei nomi utilizzato o è necessario importare lo spazio dei nomi della classe mediante un'istruzione using.
  6. Puoi dare qualsiasi nome per la classe che ha un metodo di estensione ma la classe dovrebbe essere statica.
  7. Se si desidera aggiungere nuovi metodi a un tipo e non si dispone del codice sorgente, la soluzione consiste nell'utilizzare e implementare i metodi di estensione di quel tipo.
  8. Se si creano metodi di estensione con gli stessi metodi di firma del tipo che si sta estendendo, i metodi di estensione non verranno mai chiamati.

Metodi di estensione Esempi correlati