Programmering

Sådan arbejder du med udvidelsesmetoder i C #

C # programmeringssprog understøtter udvidelsesmetoder fra C # 3.0. En udvidelsesmetode er en, der bruges til at udvide funktionaliteten af ​​eksisterende typer ved at tilføje metoder uden behov for at oprette nye afledte typer. Du behøver ikke oprette underklasser af eksisterende klasser eller kompilere eller ændre dine eksisterende klasser for at arbejde med udvidelsesmetoder. Udvidelsesmetoder forbedrer læsbarheden af ​​din kode og giver dig samtidig mulighed for at udvide funktionaliteten af ​​eksisterende typer.

De almindelige udvidelsesmetoder i .Net inkluderer LINQ standardforespørgselsoperatører, der tilføjer yderligere forespørgselfunktioner til System.Collections.IEnumerable og System.Collections.Generic.IEnumerable typer. Bemærk, at du kan drage fordel af udvidelsesmetoder til at udvide en klasse eller en grænseflade, men du kan ikke tilsidesætte deres metoder. MSDN siger: "Udvidelsesmetoder giver dig mulighed for at" tilføje "metoder til eksisterende typer uden at oprette en ny afledt type, rekompilere eller på anden måde ændre den originale type. Udvidelsesmetoder er en særlig form for statisk metode, men de kaldes som om de var instansmetoder på den udvidede type. "

I det væsentlige er en udvidelsesmetode en særlig type af en statisk metode og giver dig mulighed for at tilføje funktionalitet til en eksisterende type, selvom du ikke har adgang til kildekoden af ​​typen. En udvidelsesmetode er ligesom en anden statisk metode, men har "denne" reference som sin første parameter. Du kan tilføje så mange udvidelsesmetoder, som du vil, til enhver type. Vigtigst er det, at du også kan tilføje udvidelsesmetoder til endda en værditype.

Når du arbejder med udvidelsesmetoder, skal du huske disse punkter:

  • En udvidelsesmetode skal være en statisk metode
  • En udvidelsesmetode skal være inden for en statisk klasse - klassen kan have ethvert navn
  • Parameteren i en udvidelsesmetode skal altid have nøgleordet "dette" forud for den type, som metoden skal kaldes til

Bemærk, at det, du definerer en udvidelsesmetode på en type, der har den samme signatur som enhver anden metode af den type, som du udvider, udvidelsesmetoden kaldes aldrig.

Programmering af udvidelsesmetoder i C #

I dette afsnit vil vi undersøge, hvordan man programmerer udvidelsesmetoder ved hjælp af C #. Følgende kodeliste illustrerer, hvordan en udvidelsesmetode ser ud.

offentlig statisk klasse StringExtensions

    {

offentlig statisk bool IsNumeric (denne streng str)

        {

dobbelt output;

returner double.TryParse (str, out output);

        }

    }

Bemærk den første parameter til udvidelsesmetoden. Som allerede diskuteret skal enhver udvidelsesmetode være statisk og have "dette" nøgleord forud for den parameter, du ønsker, at metoden skal kaldes på. Når du angiver "dette" nøgleord i parameterlisten, som det er vist i ovenstående eksempel, informerer du kompilatoren om, at der er defineret en udvidelsesmetode for strengklassen.

Sådan kan du bruge udvidelsesmetoden IsNumeric på en strenginstans.

statisk ugyldigt Main (streng [] args)

        {

streng str = "100";

hvis (str.IsNumeric ())

Console.WriteLine ("Strengobjektet med navnet str indeholder numerisk værdi.");

Console.Read ();

        }

Når du udfører ovenstående program, vises meddelelsen ("Strengobjektet med navnet str indeholder numerisk værdi." Vises i konsolvinduet.

Du kan bruge udvidelsesmetoder til at indsprøjte ny funktionalitet via metoder til en type uden behov for at ændre, udlede eller genkompilere den originale type. Som jeg nævnte tidligere, kan udvidelsesmetoder også anvendes på værdityper. Lad os se, hvordan dette kan opnås med et eksempel.

Den følgende klasse med navnet IntegerExtensions indeholder en udvidelsesmetode ved navn IsEven, der returnerer true, hvis det heltal, som det kaldes på, er jævnt, ellers falsk.

offentlig statisk klasse IntegerExtensions

    {

offentlig statisk bool IsEven (denne int i)

        {

return ((i% 2) == 0);

        }

    }

Og her er hvordan du kan bruge udvidelsesmetoden IsEven på et heltal.

int n = 2;

hvis (n.IsEven ())

Console.WriteLine ("Heltalets værdi er jævn.");