logo

Laajennusmenetelmä C#:ssa

C#:ssa, laajennusmenetelmä konseptin avulla voit lisätä uusia menetelmiä olemassa olevaan luokkaan tai rakenteeseen muuttamatta alkuperäisen tyypin lähdekoodia, etkä vaadi mitään erityistä lupaa alkuperäiseltä tyypiltä eikä alkuperäistä tyyppiä tarvitse kääntää uudelleen . Se esitellään vuonna C# 3.0 .

Keskustellaan tästä konseptista esimerkin avulla. Oletetaan, että sinulla on luokka tai rakenne, joka sisältää kolme menetelmää ja haluat lisätä kaksi uutta menetelmää tähän luokkaan tai rakenteeseen, sinulla ei ole luokan/rakenteen lähdekoodia tai sinulla ei ole luokan/rakenteen oikeuksia, tai luokka on suljettu luokka, mutta haluat silti lisätä siihen uusia menetelmiä, niin voit käyttää käsitteen laajennusmenetelmää lisätäksesi uuden menetelmän olemassa olevaan luokkaan/rakenteeseen.



lajittele taulukko java

Nyt luot uuden luokan, joka on staattinen ja sisältää kaksi menetelmää, jotka haluat lisätä olemassa olevaan luokkaan, ja sido tämä luokka olemassa olevaan luokkaan. Sidonnan jälkeen näet, että olemassa oleva luokka voi käyttää kahta äskettäin lisättyä menetelmää. Kuten alla olevasta ohjelmasta näkyy.

Esimerkki:

Ensin luodaan luokka nimeltä as Nörtti sisään Ohjelma1.cs tiedosto. Se sisältää kolme menetelmää eli M1() , M2() , ja 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"); } } }>

Nyt luomme staattisen luokan nimeltä NewMethodClass in Ohjelma2.cs tiedosto. Se sisältää kaksi menetelmää, jotka ovat M4() ja M5() . Nyt haluamme lisätä nämä menetelmät Nörtti luokkaa, joten käytämme sitova parametri sitoa nämä menetelmät Geek-luokkaan. Sen jälkeen luomme toisen nimeltä GFG, jossa Geek-luokka käyttää kaikkia viittä menetelmää.>

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

Lähtö:

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

Tärkeitä kohtia:



  • Tässä, Sidontaparametrit ovat parametreja, joita käytetään sitomaan uusi menetelmä olemassa olevaan luokkaan tai rakenteeseen. Se ei ota arvoa, kun kutsut laajennusmenetelmää, koska niitä käytetään vain sitomiseen, ei mihinkään muuhun käyttöön. Laajennusmenetelmän parametriluettelossa sidosparametri on aina ensimmäisellä paikalla, jos kirjoitat sidosparametrin toiseen tai kolmanteen tai mihin tahansa muuhun paikkaan ensimmäiselle sijalle, kääntäjä antaa virheen. Sidontaparametri luodaan tällä avainsanalla, jota seuraa sen luokan nimi, johon haluat lisätä uuden menetelmän, ja parametrin nimi. Esimerkiksi:
    this Geek g>
    Tässä, Tämä avainsanaa käytetään sitomiseen, Nörtti on luokan nimi, johon haluat sitoa, ja g on parametrin nimi.
  • Laajennusmenetelmät määritellään aina staattisiksi menetelmiksi, mutta kun ne on sidottu mihin tahansa luokkaan tai rakenteeseen, ne muuttuvat ei-staattisiksi menetelmiksi.
  • Kun laajennusmenetelmä määritellään samalla nimellä ja nykyisen menetelmän allekirjoituksella, kääntäjä tulostaa olemassa olevan menetelmän, ei laajennusmenetelmän. Tai toisin sanoen, laajennusmenetelmä ei tue menetelmän ohittaminen .
  • Voit myös lisätä uusia menetelmiä sinetöity luokka käyttämällä myös laajennusmenetelmäkonseptia.
  • Sitä ei voi soveltaa kenttiin, ominaisuuksia tai tapahtumia.
  • Se on määritettävä huipputason staattisessa luokassa.
  • Useita sidosparametreja ei sallita tarkoittaa, että laajennusmenetelmä sisältää vain yhden sidosparametrin. Voit kuitenkin määrittää yhden tai useamman normaalin parametrin laajennusmenetelmässä.

Edut:

  • Laajennusmenetelmän tärkein etu on lisätä uusia menetelmiä olemassa olevaan luokkaan ilman käyttöä perinnön .
  • Voit lisätä uusia menetelmiä olemassa olevaan luokkaan muuttamatta olemassa olevan luokan lähdekoodia.
  • Se voi myös toimia sinetöity luokka .