logo

Metóda rozšírenia v C#

V C# je spôsob rozšírenia koncept vám umožňuje pridávať nové metódy do existujúcej triedy alebo do štruktúry bez úpravy zdrojového kódu pôvodného typu a nepotrebujete žiadne špeciálne povolenia od pôvodného typu a nie je potrebné prekompilovať pôvodný typ . Zavádza sa v C# 3.0 .

Poďme diskutovať o tomto koncepte pomocou príkladu. Predpokladajme, že máte triedu alebo štruktúru, ktorá obsahuje tri metódy a chcete do tejto triedy alebo štruktúry pridať dve nové metódy, nemáte zdrojový kód triedy/štruktúry alebo nemáte oprávnenia z triedy/štruktúry, alebo trieda je zapečatená trieda, ale stále do nej chcete pridať nové metódy, potom môžete použiť metódu rozšírenia konceptu na pridanie novej metódy do existujúcej triedy/štruktúry.



css komentár

Teraz vytvoríte novú triedu, ktorá je statická a obsahuje dve metódy, ktoré chcete pridať k existujúcej triede, teraz túto triedu spojte s existujúcou triedou. Po viazaní uvidíte, že existujúca trieda má prístup k dvom novo pridaným metódam. Ako je uvedené v programe nižšie.

Príklad:

Najprv vytvoríme triedu s názvom as Geek v Program1.cs súbor. Obsahuje tri metódy, tj M1() , M2() , a 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 vytvoríme statickú triedu s názvom NewMethodClass in Program2.cs súbor. Obsahuje dve metódy, ktoré sú M4() a M5() . Teraz chceme tieto metódy pridať Geek triedy, takže používame väzbový parameter spojiť tieto metódy s triedou Geek. Potom vytvoríme ďalší s názvom GFG, v ktorom trieda Geek pristupuje ku všetkým piatim metódam.>

C#
// 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"); } } }>

Výkon:

Method Name: M1 Method Name: M2 Method Name: M3 Method Name: M4 Method Name: M5>

Dôležité body:



  • Tu, Parametre viazania sú tie parametre, ktoré sa používajú na spojenie novej metódy s existujúcou triedou alebo štruktúrou. Nemá žiadnu hodnotu, keď voláte metódu rozšírenia, pretože sa používajú iba na viazanie, nie na iné použitie. V zozname parametrov metódy rozšírenia je parameter väzby vždy na prvom mieste, ak parameter väzby napíšete na druhé, tretie alebo iné miesto namiesto prvého miesta, potom kompilátor zobrazí chybu. Parameter väzby sa vytvorí pomocou tohto kľúčového slova, za ktorým nasleduje názov triedy, do ktorej chcete pridať novú metódu, a názov parametra. Napríklad:
    this Geek g>
    Tu, toto kľúčové slovo sa používa na viazanie, Geek je názov triedy, v ktorej chcete vytvoriť väzbu, a g je názov parametra.
  • Metódy rozšírenia sú vždy definované ako statické metódy, ale keď sú spojené s akoukoľvek triedou alebo štruktúrou, konvertujú sa na nestatické metódy.
  • Keď je metóda rozšírenia definovaná s rovnakým názvom a podpisom existujúcej metódy, kompilátor vytlačí existujúcu metódu, nie metódu rozšírenia. Alebo inými slovami, metóda rozšírenia nepodporuje prepísanie metódy .
  • Môžete tiež pridať nové metódy v zapečatená trieda aj pomocou konceptu metódy rozšírenia.
  • Nemôže sa vzťahovať na polia, vlastnosti alebo udalosti.
  • Musí byť definovaný v statickej triede najvyššej úrovne.
  • Viacnásobné parametre väzby nie sú povolené, čo znamená, že metóda rozšírenia obsahuje iba jeden parameter väzby. V metóde rozšírenia však môžete definovať jeden alebo viac normálnych parametrov.

Výhody:

  • Hlavnou výhodou metódy rozšírenia je pridávanie nových metód do existujúcej triedy bez použitia dedičstvo .
  • Do existujúcej triedy môžete pridať nové metódy bez úpravy zdrojového kódu existujúcej triedy.
  • Dá sa pracovať aj s zapečatená trieda .