C# forlengelsesmetoder

C# forlengelsesmetoder
Utvidelsesmetodekonseptet brukes til å sette inn nye metoder i klassen som allerede er til stede i programmet. Eller det kan tillate oss å legge til noen utvidelsesfunksjoner uten å redigere kildekoden for den opprinnelige typen. Dette forhindrer bruk av arv og gjør koden komplisert. Hvordan kan disse metodene nås hvis utvidelsesmetodene er til stede i den nye klassen?

Responsen på denne spørringen ligger i bruken av en bindingsparameter. Disse brukes til å binde klassen med de nyopprettede funksjonene. Det er en tom variabel som ikke inneholder noen verdi; det fungerer bare som et enkelt nøkkelord. Det er alltid erklært i utgangspunktet i listen over parametere. Hvis det er skrevet annet enn på det første stedet, vil den aktuelle kompilatoren gi en feil. Nøkkelordet som brukes til bindingsformålet er 'dette'.

# Denne prøven er;

Alle utvidelsesmetoder er alltid erklært som statiske, men når bindingen har skjedd med klassen, blir disse funksjonene ikke-statiske.

Eksempel 1

Tenk på et enkelt C Sharp -program der tre funksjoner er definert. Alle disse funksjonene inneholder en enkel konsoll.WritLine -uttalelse for å vise meldingen på skjermene. Disse metodene er de vanlige funksjonene som enkle programmer har.

# Public void M1 ()

Nå vil vi legge til utvidelser til dette eksisterende programmet. Utvidelser spiller en viktig rolle i å legge til nye funksjoner i klassen uten å bruke arv. Dessuten kan vi ganske enkelt legge til en ny klasse uten å redigere den forrige. Vi vil legge til to utvidelsesmetoder i klasseprøven. De nye funksjonene vil bli erklært i en ny statisk klasse og bli en del av den eksisterende prøveklassen. Denne prosessen er kjent som binding. Så det opprettes en ny statisk klasse. Denne klassen har ingen kobling til den eksisterende klassen, da den ikke er arvet fra den abstrakte klassen eller allerede eksisterende klasse.

Inne i klassen erklærer vi to nye statiske funksjoner. Disse funksjonene har de samme utsagnene som skal vises. Mens erklæringen om de statiske funksjonene, i parameteren, bruker vi nøkkelordet 'dette' sammen med objektet til prøveklassen. A 'dette' er en bindende parameter; Den inneholder ingen verdi, men brukes bare til å binde de nyopprettede statiske metodene med den eksisterende i klassen som allerede er definert. Når vi ønsker å binde metodene med klasseprøven, brukes klassen og objektet i argumenter for det bindende formålet.

# Offentlig statisk tomrom M4 (denne prøven er)

Tilsvarende vil den andre funksjonen også ta dette nøkkelordet og objektet for klassen. I listen over parametere erklærer vi bindende parametere alltid i starten av.

Denne funksjonen vil vise en uttalelse som er gitt til den gjennom hovedprogrammet. En klasse for hovedprogrammet er erklært. Inne. Det er ikke nødvendig å lage et objekt for den nye klassen.

# Prøve s = ny prøve ();

Objektet med klassen er oppgitt dynamisk. Dette objektet vil kalle alle funksjonene til begge de separat definerte klassene.

# S.M1 ();

Vi vil utføre ovennevnte kildekode i Ubuntu -terminalen. For dette formålet vil det være behov for en kompilator, så vi bruker MC -er, og vi vil bruke Mono til å utføre filen med utvidelsen av .EXE.

$ MCS -fil.CS
$ mono -fil.EXE

Eksempel 2

I dette eksemplet opprettes en boolsk funksjon for å sammenligne to verdier og avkastning om den første verdien er større enn den første. Denne sammenligningen er gjort i utvidelsesklassen erklært i en utvidelsesmetode. Etter å ha erklært bibliotekene, har vi direkte brukt en enkelt klasse der en utvidet metode er erklært.

Inne i klassen har vi tatt en BOOL -type funksjon. Denne boolske vil returnere en enkelt verdi, 'sann' eller 'falsk' om gangen. Hvis den første verdien er større enn 'sann', vil bli sendt; Ellers vil svaret være falskt. Denne parameteren inneholder 'denne' -parameteren for å binde den utvidede funksjonen med variablene vi har sendt til den fra hovedprogrammet. Mens to variabler av heltalldatatypen også er erklært her for å lagre verdiene. Sammenligningen mellom disse to heltallstallene vil bli gjort, og verdien vil bli returnert.

Inne i hovedprogrammet tas en heltallstypevariabel og tildelt en verdi.

# Bool z = stri.myextensionMethod (200);

En variabel bool -type vil bli erklært her for å godta funksjonens returnerte verdi i en funksjonsanrop. Objektet stri brukes til å kalle funksjonen. Dette vil ta en verdi i parameteren. Den andre verdien blir sendt til den gjennom objektet når du ringer funksjonen.

Lagre koden og utfør den; Du vil se at den første verdien var mindre enn den andre, og det er grunnen til at svaret er falskt.

Eksempel 3

I dette eksemplet på C Sharp har vi brukt en innebygd strengmetode for å beregne inngangsstrengens lengde som er overført mot hovedprogrammets funksjon. En statisk klasse opprettes. Det statiske nøkkelordet viser at en annen klasse ikke kan arve det. Inne i denne statiske klassen er en statisk metode erklært. Denne metoden vil finne den totale lengden på strengen. Så metodeparameteren vil inneholde en strengtypevariabel for å akseptere inngangsstrengen.

Lengdemetoden får tilgang til gjennom objektet til strengen. Nå erklære hovedfunksjonen. Tilordne en strengverdi til strengdatatypen.

# Int z = stri.ExtensionMethodName ();

Denne funksjonssamtalen vil ta lengden tilbake og lagre den i heltallstypen variabel. Denne lengden vises gjennom denne variabelen senere ved hjelp av WritLine () -metoden.

Kompilere koden og utføre den. Du vil se at en streng på 10 tegn ble brukt i programmet.

Konklusjon

En utvidelsesmetode i C Sharp brukes til å legge til litt ekstra funksjonalitet til programmet uten å endre den eksisterende koden når den er skrevet når det er skrevet. Dette kan gjøres ved å bruke en ekstra klasse med utvidede metoder. Imidlertid er disse metodene en del av en annen klasse, men kan kobles og få tilgang til fra gjenstanden for den allerede opprettede klassen. Vi har brukt noen grunnleggende eksempler som har forklart opprettelsen og arbeidet med de utvidede metodene. Nøkkelordet 'dette' spiller en viktig rolle i bindende utvidelsesmetoder med klassen. Vi bruker dette nøkkelordet i parameteren til den utvidede funksjonen.