logo

Metoda de extensie în C#

În C#, metoda de extensie concept vă permite să adăugați metode noi în clasa existentă sau în structură fără a modifica codul sursă al tipului original și nu aveți nevoie de niciun fel de permisiune specială de la tipul original și nu este nevoie să compilați din nou tipul original . Este introdus în C# 3.0 .

Să discutăm acest concept cu ajutorul unui exemplu. Să presupunem că aveți o clasă sau o structură care conține trei metode și doriți să adăugați două metode noi în această clasă sau structură, nu aveți codul sursă al clasei/structurii sau nu aveți permisiuni de la clasă/structură sau clasa este o clasă sigilată, dar încă doriți să adăugați metode noi în ea, apoi puteți utiliza metoda extensiei de concept pentru a adăuga metoda nouă în clasa/structura existentă.



formatator de șiruri

Acum creați o nouă clasă care este statică și conține cele două metode pe care doriți să le adăugați la clasa existentă, acum legați această clasă cu clasa existentă. După legare, veți vedea că clasa existentă poate accesa cele două metode nou adăugate. După cum se arată în programul de mai jos.

Exemplu:

Mai întâi creăm o clasă numită ca Geek în Program1.cs fişier. Conține trei metode, adică 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"); } } }>

Acum creăm o clasă statică numită NewMethodClass în Program2.cs fişier. Conține două metode care sunt M4() și M5() . Acum vrem să adăugăm aceste metode în Geek clasa, așa că folosim parametru de legare pentru a lega aceste metode cu clasa Geek. După aceea, creăm un altul numit GFG în care clasa Geek accesează toate cele cinci metode.>

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

Ieșire:

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

Puncte importante:



  • Aici, Parametri de legare sunt acei parametri care sunt utilizați pentru a lega noua metodă cu clasa sau structura existentă. Nu ia nicio valoare atunci când apelați metoda extensiei, deoarece acestea sunt folosite doar pentru legare, nu pentru alte utilizări. În lista de parametri a metodei de extensie, parametrul de legare este întotdeauna prezent pe primul loc dacă scrieți parametrul de legare în al doilea, sau al treilea, sau în orice alt loc, mai degrabă decât pe primul loc, atunci compilatorul va da o eroare. Parametrul de legare este creat folosind acest cuvânt cheie urmat de numele clasei în care doriți să adăugați o nouă metodă și numele parametrului. De exemplu:
    this Geek g>
    Aici, acest cuvântul cheie este folosit pentru legare, Geek este numele clasei în care doriți să vă legați și g este numele parametrului.
  • Metodele de extensie sunt întotdeauna definite ca o metodă statică, dar atunci când sunt legate cu orice clasă sau structură, se vor transforma în metode non-statice.
  • Când o metodă de extensie este definită cu același nume și semnătura metodei existente, atunci compilatorul va tipări metoda existentă, nu metoda extensiei. Sau, cu alte cuvinte, metoda de extensie nu acceptă depășirea metodei .
  • De asemenea, puteți adăuga noi metode în clasa sigilată folosind de asemenea un concept de metodă de extensie.
  • Nu se poate aplica câmpurilor, proprietăți , sau evenimente.
  • Trebuie definit în clasa statică de nivel superior.
  • Parametrii multipli de legare nu sunt permisi înseamnă că o metodă de extensie conține doar un singur parametru de legare. Dar puteți defini unul sau mai mulți parametri normali în metoda de extensie.

Avantaje:

  • Principalul avantaj al metodei de extensie este acela de a adăuga noi metode în clasa existentă fără a utiliza moştenire .
  • Puteți adăuga metode noi în clasa existentă fără a modifica codul sursă al clasei existente.
  • Poate funcționa și cu clasa sigilată .