W C#, metoda przedłużania koncepcja pozwala na dodawanie nowych metod w istniejącej klasie lub w strukturze bez modyfikowania kodu źródłowego oryginalnego typu i nie wymaga żadnych specjalnych uprawnień od oryginalnego typu i nie ma potrzeby ponownej kompilacji oryginalnego typu . Jest wprowadzony w C# 3.0 .
Omówmy tę koncepcję na przykładzie. Załóżmy, że masz klasę lub strukturę zawierającą trzy metody i chcesz dodać dwie nowe metody w tej klasie lub strukturze, nie masz kodu źródłowego klasy/struktury lub nie masz uprawnień z klasy/struktury, lub klasa jest klasą zapieczętowaną, ale nadal chcesz dodać do niej nowe metody, możesz użyć metody rozszerzenia koncepcji, aby dodać nową metodę do istniejącej klasy/struktury.
sql wybierz z wielu tabel
Teraz tworzysz nową klasę, która jest statyczna i zawiera dwie metody, które chcesz dodać do istniejącej klasy, a teraz powiąż tę klasę z istniejącą klasą. Po powiązaniu zobaczysz, że istniejąca klasa może uzyskać dostęp do dwóch nowo dodanych metod. Jak pokazano w poniższym programie.

Przykład:
Najpierw tworzymy klasę o nazwie as Maniak W Program1.cs plik. Zawiera trzy metody, czyli M1() , M2() , I 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"); } } }> Teraz tworzymy klasę statyczną o nazwie NewMethodClass w Program2.cs plik. Zawiera dwie metody, które są M4() I M5() . Teraz chcemy dodać te metody Maniak class, więc używamy metody parametr wiążący aby powiązać te metody z klasą Geek. Następnie tworzymy kolejną o nazwie GFG, w której klasa Geek uzyskuje dostęp do wszystkich pięciu metod.>
// 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"); } } }> Wyjście:
Method Name: M1 Method Name: M2 Method Name: M3 Method Name: M4 Method Name: M5>
Ważne punkty:
- Tutaj, Parametry wiązania to parametry używane do powiązania nowej metody z istniejącą klasą lub strukturą. Nie przyjmuje ona żadnej wartości, gdy wywołujesz metodę rozszerzenia, ponieważ są one używane tylko do wiązania, a nie do żadnego innego zastosowania. Na liście parametrów metody rozszerzenia parametr wiązania jest zawsze obecny na pierwszym miejscu, jeśli zapiszesz parametr wiązania na drugim, trzecim lub jakimkolwiek innym miejscu, a nie na pierwszym miejscu, kompilator zgłosi błąd. Parametr wiązania jest tworzony przy użyciu słowa kluczowego, po którym następuje nazwa klasy, do której chcesz dodać nową metodę, oraz nazwa parametru. Na przykład:
this Geek g>
Tutaj, Ten słowo kluczowe służy do wiązania, Maniak to nazwa klasy, w której chcesz wykonać powiązanie, oraz G to nazwa parametru. - Metody rozszerzające są zawsze definiowane jako metody statyczne, ale gdy są powiązane z dowolną klasą lub strukturą, zostaną przekształcone w metody niestatyczne.
- Gdy zdefiniowana jest metoda rozszerzenia o tej samej nazwie i podpisie istniejącej metody, kompilator wydrukuje istniejącą metodę, a nie metodę rozszerzenia. Innymi słowy, metoda rozszerzenia nie obsługuje nadpisanie metody .
- Możesz także dodać nowe metody w pliku klasa zamknięta również przy użyciu koncepcji metody rozszerzenia.
- Nie może dotyczyć pól, nieruchomości lub wydarzenia.
- Musi być zdefiniowany w klasie statycznej najwyższego poziomu.
- Wiele parametrów powiązania nie jest dozwolonych, co oznacza, że metoda rozszerzenia zawiera tylko jeden parametr powiązania. Można jednak zdefiniować jeden lub więcej parametrów normalnych w metodzie rozszerzenia.
Zalety:
- Główną zaletą metody rozszerzenia jest dodanie nowych metod w istniejącej klasie bez użycia dziedzictwo .
- Możesz dodać nowe metody w istniejącej klasie bez modyfikowania kodu źródłowego istniejącej klasy.
- Można z nim także współpracować klasa zamknięta .