I C# er udvidelsesmetode koncept giver dig mulighed for at tilføje nye metoder i den eksisterende klasse eller i strukturen uden at ændre kildekoden for den originale type, og du kræver ingen form for særlig tilladelse fra den originale type, og der er ingen grund til at genkompilere den originale type . Det introduceres i C# 3.0 .
Lad os diskutere dette koncept ved hjælp af et eksempel. Antag, at du har en klasse eller en struktur, der indeholder tre metoder, og du vil tilføje to nye metoder i denne klasse eller struktur, du har ikke kildekoden til klassen/strukturen eller har ikke tilladelser fra klassen/strukturen, eller klassen er en forseglet klasse, men du vil stadig tilføje nye metoder i den, så kan du bruge konceptudvidelsesmetoden til at tilføje den nye metode i den eksisterende klasse/struktur.
sammenligne med java
Nu opretter du en ny klasse, der er statisk og indeholder de to metoder, som du vil tilføje til den eksisterende klasse, bind nu denne klasse med den eksisterende klasse. Efter binding vil du se, at den eksisterende klasse kan få adgang til de to nyligt tilføjede metoder. Som vist i nedenstående program.

Eksempel:
Først opretter vi en klasse med navnet som Nørd i Program1.cs fil. Det indeholder tre metoder, dvs M1() , M2() , og 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"); } } }> Nu opretter vi en statisk klasse med navnet NewMethodClass i Program2.cs fil. Det indeholder to metoder, der er M4() og M5() . Nu vil vi tilføje disse metoder Nørd klasse, så vi bruger bindende parameter at binde disse metoder med Geek-klassen. Derefter opretter vi en anden med navnet GFG, hvor Geek-klassen får adgang til alle de fem metoder.>
// 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"); } } }> Produktion:
Method Name: M1 Method Name: M2 Method Name: M3 Method Name: M4 Method Name: M5>
Vigtige punkter:
- Her, Bindende parametre er de parametre, der bruges til at binde den nye metode med den eksisterende klasse eller struktur. Det tager ikke nogen værdi, når du kalder forlængelsesmetoden, fordi de kun bruges til binding og ikke til anden brug. I parameterlisten for udvidelsesmetoden er bindingsparameter altid til stede på det første sted, hvis du skriver bindingsparameter til anden, eller tredje, eller et hvilket som helst andet sted i stedet for førstepladsen, vil compileren give en fejl. Bindingsparameteren oprettes ved hjælp af dette nøgleord efterfulgt af navnet på den klasse, hvor du vil tilføje en ny metode, og parameternavnet. For eksempel:
this Geek g>
Her, det her søgeord bruges til binding, Nørd er det klassenavn, du vil binde i, og g er parameternavnet. - Udvidelsesmetoder er altid defineret som en statisk metode, men når de er bundet til en hvilken som helst klasse eller struktur, konverteres de til ikke-statiske metoder.
- Når en udvidelsesmetode er defineret med det samme navn og signaturen for den eksisterende metode, udskriver compileren den eksisterende metode, ikke udvidelsesmetoden. Eller med andre ord, udvidelsesmetoden understøtter ikke metode tilsidesætte .
- Du kan også tilføje nye metoder i forseglet klasse også ved hjælp af et udvidelsesmetodekoncept.
- Det kan ikke gælde for felter, ejendomme eller begivenheder.
- Det skal defineres i statisk klasse på øverste niveau.
- Flere bindingsparametre er ikke tilladt betyder, at en udvidelsesmetode kun indeholder en enkelt bindingsparameter. Men du kan definere en eller flere normale parametre i udvidelsesmetoden.
Fordele:
- Den største fordel ved udvidelsesmetoden er at tilføje nye metoder i den eksisterende klasse uden at bruge arv .
- Du kan tilføje nye metoder i den eksisterende klasse uden at ændre kildekoden for den eksisterende klasse.
- Det kan også arbejde med forseglet klasse .