Programmering

Hvordan jobbe med generiske legemidler i C #

C # er et sterkt skrevet språk. Dette innebærer at når du bruker C #, bør du erklære en type før du lagrer data i den. Selv om denne typen sikkerhet hjelper med å håndheve sikkerhet og interoperabilitet mellom språk som er målrettet mot det administrerte miljøet, er du som utvikler begrenset til å definere hvilken type objekt du trenger å jobbe med.

OK, men hva om du vil lagre data i en typesafe-samling, sans for boksing og unboxing overhead? Her kommer generiske midler til unnsetning.

Generics lar deg jobbe med typesafe data uten boksing og unboxing overhead. Du kan utnytte generikk for å lage typesafe samlinger, samt klasser og metoder som kan godta en type som parameter. Slike klasser som en gang er erklært, kan fungere med alle typer. Dette hjelper koden din til å bli mye mer håndterbar, utvidbar, vedlikeholdbar og effektiv. I denne artikkelen vil vi utforske generikk og hvordan de kan implementeres ved hjelp av programmeringsspråket C #.

Generics hjelper deg med å implementere algoritmer som kan fungere på mange forskjellige typer. Som et eksempel kan det være lurt å skrive en algoritme for å sortere et utvalg av heltall eller dobbeltrom, eller til og med en rekke strenger. For å implementere slike sorteringsalgoritmer uten generiske behov, trenger du vanligvis flere sorteringsmetoder - en for hver type.

Når du har erklært en klasse eller en metode ved hjelp av typeparametere, kan du utsette å spesifisere typen som klassene eller metodene vil fungere med til den tiden disse klassene og metodene er tilgjengelige fra klientkoden. Generics fremmer typesikkerhet, vedlikehold av koder, effektivitet og forbedret ytelse. Vær oppmerksom på at du kan utnytte generikk for å implementere dine egne generiske klasser, grensesnitt, metoder, hendelser og delegater.

Når du bruker generiske produkter, trenger du ikke lenger å skrive cast objektene til de respektive typene - typeinformasjonen er godt dokumentert i koden din. Når du bruker generiske produkter, gjør kompilatoren tidskontroller av koden din for samsvar med typesikkerhet. Koder som bruker generiske stoffer, skyldes alltid at boksing og unboxing overhead unngås.

Følgende kodeliste viser tre metoder som sorterer inndataene - du trenger en sorteringsmetode for hver type.

public static int [] Sort (int [] integerArray)

  {

// Kode for å sortere en rekke heltall

returnere heltallArray;

  }

offentlig statisk streng [] Sorter (streng [] strengArray)

  {

// Kode for å sortere en rekke strenger

retur strengArray;

  }

offentlig dobbel [] Sorter (dobbel [] dobbelArray)

  {

// Kode for å sortere en rekke dobler

returner dobbelArray;

  }

Hvis du bruker Generics, kan du bare ha en metode som kan godta en typeparameter og sortere inndataene når du blir spurt.

offentlig klasse Algoritme

    {

offentlig statisk T [] Sorter (T [] inputArray)

        {

// Kode for å sortere en generisk matrise

returner inputArray;

        }

    }

Skriv inn parameterbegrensninger

Når du arbeider med generiske legemidler, bør du være oppmerksom på de generiske begrensningene som inkluderer: avledningsbegrensninger og standardkonstrukturbegrensninger. Derivasjonsbegrensningene brukes til å spesifisere grensesnittet eller klassen som skal brukes til å definere derivatet for den generiske typen.

Her er et eksempel som illustrerer hvordan grensesnitt ILogger har blitt brukt til å begrense typeparameteren T (når du definerer DBLogger klasse) for å være av typen ILogger grensesnitt.

offentlig grensesnitt ILogger

    {

// Noe kode

    }

offentlig klasse DBLogger hvor T: ILogger

    {

// Noe kode

    }

Dine generiske typeparametere kan enten være av verdi eller referansetyper. Som et eksempel kan du definere klassen din som inneholder en generisk parameterparameter på en av følgende måter.

offentlig klasse FileLogger der T: klasse

    {

// Noe kode

    }

offentlig klasse BaseLogger der T: int

    {

// Noe kode

    }

Konstruktørbegrensningen brukes til å håndheve en standardkonstruktør for parameteren generisk type. Her er et eksempel for å illustrere dette konseptet.

klasse DBLogger der T: ny () // Generisk type parameter T må ha en standard konstruktør

{

// Noe kode

}

Du kan også bruke generiske parametere når du arbeider med arv. Her er et eksempel som viser hvordan du kan oppnå dette. Vær oppmerksom på at parameteren for generisk type i eksemplet nedenfor skal ha en standardkonstruktør.

offentlig klasse BaseLogger

    {

// Noe kode

    }

offentlig klasse FileLogger: BaseLogger hvor T: ny ()

    {

// Noe kode

    }

Følgende kodeliste viser hvordan generiske metoder kan implementeres.

offentlig klasse BaseLogger

    {

offentlig tomrom Initialiser (T t)

        {

// Kode for å initialisere logger

        }

    }

Se kodebiten gitt ovenfor. Legg merke til hvordan den generiske typen parameter har blitt brukt som en parameter i Initialiser () metode. Jeg vil diskutere mer om generiske stoffer i mine fremtidige innlegg her. Du kan lære mer om generiske legemidler her: //msdn.microsoft.com/en-us/library/512aeb7t.aspx

$config[zx-auto] not found$config[zx-overlay] not found