English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Come suggerisce il nome, i metodi di estensione sono metodi aggiuntivi. I metodi di estensione ti permettono di injectionare altri metodi senza dover modificare, derivare o ricompilare la classe, la struttura o l'interfaccia originale. Puoi aggiungere metodi di estensione alla tua classe personalizzata, alle classi del .NET Framework, a classi di terze parti o a interfacce.
I metodi di estensione sono una nuova funzionalità introdotta in C# 3.0, che consente di estendere le funzionalità del codice sorgente senza modificare il codice della classe originale, derivare o ricompilare. Puoi aggiungere metodi di estensione alla tua classe personalizzata, alle classi del .NET Framework, a classi di terze parti o a interfacce.
I requisiti dei metodi di estensione sono i seguenti:
I metodi di estensione devono essere inclusi in una classe modificata staticamente.
L'implementazione dell'estensione deve essere in forma statica.
Il primo parametro dei metodi di estensione ha il prefisso this, che indica che deve essere esteso l'oggetto della classe, a partire dal secondo parametro, è la lista dei parametri del metodo di estensione.
Nel seguente esempio, IsGreaterThan () è un metodo di estensione per il tipo int, che restituisce true se il valore della variabile int è maggiore dell'intero parametro fornito.
int i = 10; bool result = i.IsGreaterThan(100); // Restituisce FALSE
Il metodo IsGreaterThan () non è un metodo del tipo di dati int (struct Int32). È un metodo di estensione scritto dal programmatore per il tipo di dati int. Includendo lo spazio dei nomi che definisce l'estensione IsGreaterThan (), il metodo di estensione IsGreaterThan () sarà disponibile in tutto l'applicazione.
I metodi di estensione hanno un simbolo speciale in Visual Studio IntelliSense, quindi puoi distinguere facilmente i metodi di classe dai metodi di estensione.
Ora vediamo come scrivere metodi di estensione.
I metodi di estensione sono in realtà un tipo speciale di metodo statico definito in una classe statica. Per definire un metodo di estensione, prima di tutto, definisci una classe statica.
Ad esempio, nel seguente esempio, abbiamo creato una classe IntExtensions nel namespace ExtensionMethods. La classe IntExtensions conterrà tutti i metodi di estensione applicabili al tipo di dati int. (Puoi utilizzare qualsiasi nome per il namespace e la classe.)
namespace ExtensionMethods { public static class IntExtensions { } }
Ora, definire un metodo statico come metodo estensione, dove il primo parametro del metodo estensione specifica il tipo a cui si applica l'estensione. Utilizzeremo questo metodo estensione sul tipo int. Pertanto, è necessario aggiungerethis Modificatori.
Ad esempio, il metodo IsGreaterThan() opera sugli int, quindi il primo parametro è this int i.
namespace ExtensionMethods { public static class IntExtensions { public static bool IsGreaterThan(this int i, int value) { return i > value; } } }
Ora, è possibile includere lo spazio dei nomi ExtensionMethods in qualsiasi luogo desideri utilizzare questo metodo estensione.
using ExtensionMethods; class Program { static void Main(string[] args) { int i = 10; bool result = i.IsGreaterThan(100); Console.WriteLine(result); } }
false
L'unica differenza tra un metodo statico regolare e un metodo estensione è che il primo parametro dell'estensione specifica il tipo su cui il metodo estensione eseguirà l'operazione, seguito da this Parola chiave.
C# supporta solo i metodi estensione, non le proprietà estensione, gli eventi estensione, gli operatori estensione, ecc.
I metodi estensione (quelli con this come primo parametro) devono essere dichiarati in una classe statica non generica, i metodi estensione devono avere un parametro e solo il primo parametro deve avere il marchio this.
Il compilatore C# richiede che le classi statiche in cui si cercano i metodi estensione abbiano un'area di applicazione di file.
Il compilatore C# richiede che i metodi estensione siano 'importati'. (I metodi statici possono avere qualsiasi nome, ma il compilatore C# deve spendere tempo a cercare, verificando tutte le classi statiche nel contesto del file e scansionando tutti i loro metodi statici per trovare una corrispondenza)
Più classi statiche possono definire lo stesso metodo estensione.
Quando si estende un tipo con un metodo estensione, si estende anche il tipo derivato.
Deve essere in una classe statica non annidata e non generica (quindi deve essere un metodo statico)
Deve esserci almeno un parametro.
Il primo parametro deve avere il prefisso del关键字 this.
Il primo parametro non può avere altri修饰符 (come ref o out).
Il tipo del primo parametro non può essere un tipo puntatore.
I metodi di estensione sono metodi personalizzati che non sono originariamente inclusi nella classe.
I metodi di estensione possono essere aggiunti a classi, strutture o interfacce personalizzate, .NET Framework o di terze parti.
Il primo parametro dell'estensione deve essere il tipo al quale si applica l'estensione, seguito dathisParola chiave.
E' possibile utilizzare i metodi di estensione in qualsiasi posizione dell'applicazione attraverso lo spazio dei nomi che contiene i metodi di estensione.