In C#, il metodo di estensione concept ti permette di aggiungere nuovi metodi nella classe esistente o nella struttura senza modificare il codice sorgente del tipo originale e non è richiesto alcun tipo di permesso speciale da parte del tipo originale e non è necessario ricompilare il tipo originale . Viene introdotto nel C#3.0 .
Parliamo di questo concetto con l'aiuto di un esempio. Supponiamo di avere una classe o una struttura che contiene tre metodi e di voler aggiungere due nuovi metodi in questa classe o struttura, di non avere il codice sorgente della classe/struttura o di non avere i permessi dalla classe/struttura, oppure la classe è una classe sigillata, ma desideri comunque aggiungervi nuovi metodi, quindi puoi utilizzare il metodo di estensione del concetto per aggiungere il nuovo metodo nella classe/struttura esistente.
albero binario in Java
Ora crei una nuova classe che è statica e contiene i due metodi che desideri aggiungere alla classe esistente, ora associa questa classe alla classe esistente. Dopo l'associazione vedrai che la classe esistente può accedere ai due metodi appena aggiunti. Come mostrato nel programma qui sotto.

Esempio:
Per prima cosa creiamo una classe chiamata as Tipo strano In Programma1.cs file. Contiene tre metodi M1() , M2() , E M3() .
C#
// C# program to illustrate the concept // of the extension methods using System; namespace ExtensionMethod { // Here Geek class contains three methods // Now we want to add two more new methods in it // Without re-compiling this class class Geek { // Method 1 public void M1() { Console.WriteLine("Method Name: M1"); } // Method 2 public void M2() { Console.WriteLine("Method Name: M2"); } // Method 3 public void M3() { Console.WriteLine("Method Name: M3"); } } }> Ora creiamo una classe statica denominata NewMethodClass in Programma2.cs file. Contiene due metodi che sono M4() E M5() . Ora vogliamo aggiungere questi metodi Tipo strano classe, quindi usiamo la classe parametro vincolante per associare questi metodi con la classe Geek. Successivamente, ne creiamo un altro denominato GFG in cui la classe Geek accede a tutti e cinque i metodi.>
// C# program to illustrate the concept // of the extension methods using System; namespace ExtensionMethod { // This class contains M4 and M5 method // Which we want to add in Geek class. // NewMethodClass is a static class static class NewMethodClass { // Method 4 public static void M4(this Geek g) { Console.WriteLine("Method Name: M4"); } // Method 5 public static void M5(this Geek g, string str) { Console.WriteLine(str); } } // Now we create a new class in which // Geek class access all the five methods public class GFG { // Main Method public static void Main(string[] args) { Geek g = new Geek(); g.M1(); g.M2(); g.M3(); g.M4(); g.M5("Method Name: M5"); } } }> Produzione:
Method Name: M1 Method Name: M2 Method Name: M3 Method Name: M4 Method Name: M5>
Punti importanti:
- Qui, Parametri vincolanti sono quei parametri che vengono utilizzati per associare il nuovo metodo alla classe o struttura esistente. Non assume alcun valore quando si chiama il metodo di estensione perché vengono utilizzati solo per l'associazione e non per altri usi. Nell'elenco dei parametri del metodo di estensione il parametro di associazione è sempre presente al primo posto se si scrive il parametro di associazione al secondo, al terzo o in qualsiasi altra posizione anziché al primo posto, il compilatore genererà un errore. Il parametro di associazione viene creato utilizzando questa parola chiave seguita dal nome della classe in cui si desidera aggiungere un nuovo metodo e dal nome del parametro. Per esempio:
this Geek g>
Qui, Questo la parola chiave viene utilizzata per l'associazione, Tipo strano è il nome della classe a cui vuoi associare e G è il nome del parametro. - I metodi di estensione sono sempre definiti come metodi statici, ma quando sono associati a qualsiasi classe o struttura si convertono in metodi non statici.
- Quando un metodo di estensione viene definito con lo stesso nome e la stessa firma del metodo esistente, il compilatore stamperà il metodo esistente, non il metodo di estensione. O in altre parole, il metodo di estensione non supporta metodo prevalente .
- Puoi anche aggiungere nuovi metodi nel file classe sigillata anche utilizzando un concetto di metodo di estensione.
- Non può applicarsi ai campi, proprietà o eventi.
- Deve essere definito nella classe statica di livello superiore.
- Non sono consentiti più parametri di associazione: un metodo di estensione contiene solo un singolo parametro di associazione. Ma puoi definire uno o più parametri normali nel metodo di estensione.
Vantaggi:
- Il vantaggio principale del metodo di estensione è aggiungere nuovi metodi nella classe esistente senza utilizzare eredità .
- Puoi aggiungere nuovi metodi nella classe esistente senza modificare il codice sorgente della classe esistente.
- Può anche funzionare con classe sigillata .