I C# er det utvidelsesmetode konseptet lar deg legge til nye metoder i den eksisterende klassen eller i strukturen uten å endre kildekoden til den opprinnelige typen, og du trenger ingen form for spesiell tillatelse fra den opprinnelige typen, og det er ikke nødvendig å kompilere den opprinnelige typen på nytt . Det er introdusert i C# 3.0 .
La oss diskutere dette konseptet ved hjelp av et eksempel. Anta at du har en klasse eller en struktur som inneholder tre metoder og du vil legge til to nye metoder i denne klassen eller strukturen, du har ikke kildekoden til klassen/strukturen eller har ikke tillatelser fra klassen/strukturen, eller klassen er en forseglet klasse, men du vil fortsatt legge til nye metoder i den, så kan du bruke konseptutvidelsesmetoden for å legge til den nye metoden i den eksisterende klassen/strukturen.
rutenettoppsett
Nå oppretter du en ny klasse som er statisk og inneholder de to metodene du vil legge til den eksisterende klassen, bind nå denne klassen med den eksisterende klassen. Etter binding vil du se at den eksisterende klassen kan få tilgang til de to nylig lagt til metodene. Som vist i programmet nedenfor.

Eksempel:
Først lager vi en klasse som heter som Nerd i Program1.cs fil. Den inneholder tre metoder som er 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"); } } }> Nå lager vi en statisk klasse kalt NewMethodClass i Program2.cs fil. Den inneholder to metoder som er M4() og M5() . Nå ønsker vi å legge til disse metodene Nerd klasse, så vi bruker bindingsparameter å binde disse metodene med Geek-klassen. Etter det lager vi en annen kalt GFG der Geek-klassen får tilgang til alle de fem metodene.>
// 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"); } } }> Produksjon:
Method Name: M1 Method Name: M2 Method Name: M3 Method Name: M4 Method Name: M5>
Viktige punkter:
- Her, Bindende parametere er de parameterne som brukes til å binde den nye metoden med den eksisterende klassen eller strukturen. Det tar ingen verdi når du kaller utvidelsesmetoden fordi de bare brukes til binding og ikke til annen bruk. I parameterlisten til utvidelsesmetoden er bindingsparameter alltid tilstede på første plass hvis du skriver bindingsparameter til andre, eller tredje, eller et hvilket som helst annet sted i stedet for første plass, vil kompilatoren gi en feil. Bindingsparameteren opprettes ved hjelp av dette nøkkelordet etterfulgt av navnet på klassen du vil legge til en ny metode i og parameternavnet. For eksempel:
this Geek g>
Her, dette nøkkelord brukes for binding, Nerd er klassenavnet du ønsker å binde, og g er parameternavnet. - Utvidelsesmetoder er alltid definert som en statisk metode, men når de er bundet til en hvilken som helst klasse eller struktur, vil de konvertere til ikke-statiske metoder.
- Når en utvidelsesmetode er definert med samme navn og signaturen til den eksisterende metoden, vil kompilatoren skrive ut den eksisterende metoden, ikke utvidelsesmetoden. Eller med andre ord, utvidelsesmetoden støtter ikke metodeoverstyrende .
- Du kan også legge til nye metoder i forseglet klasse også ved hjelp av et utvidelsesmetodekonsept.
- Det kan ikke gjelde felt, egenskaper eller hendelser.
- Den må defineres i statisk klasse på toppnivå.
- Flere bindingsparametere er ikke tillatt betyr at en utvidelsesmetode bare inneholder en enkelt bindingsparameter. Men du kan definere en eller flere normale parametere i utvidelsesmetoden.
Fordeler:
- Den største fordelen med utvidelsesmetoden er å legge til nye metoder i den eksisterende klassen uten å bruke arv .
- Du kan legge til nye metoder i den eksisterende klassen uten å endre kildekoden til den eksisterende klassen.
- Det kan også fungere med forseglet klasse .