Programmering

Hvordan jobbe med strutter i C #

Selv om det er mange likheter mellom en klasse og en struktur, er det også noen forskjellige forskjeller. Viktigst, en struktur i motsetning til en klasse, er en verditype. Så mens forekomster av en klasse er lagret i dyngen, blir forekomster av en struktur lagret i bunken.

Når en forekomst av en struktur sendes til en metode, sendes den alltid etter verdi. Dette er i motsetning til hva som skjer når vi overfører en forekomst av en klasse til en metode - forekomsten sendes som referanse.

Programmering av strukturer i C #

Slik ser syntaksen for å erklære en struktur ut.

struct

{

// Datamedlemmer og medlemsfunksjoner i strukturen

}

Følgende kodebit viser hvordan en typisk strukturdefinisjon ser ut.

struct Rektangel

    {

offentlig int bredde;

offentlig int høyde;

    }

Du kan nå tilordne verdier til medlemmene i strukturen du har definert tidligere som vist i kodebiten nedenfor.

Rektangelrektangel = nytt rektangel ();

rektangel. bredde = 10;

rektangel. høyde = 15;

Ovennevnte kodebit oppretter en forekomst av Rectangle-strukturen og tildeler verdier til de offentlige medlemmene av den. Merk at du kan ha både medlemsdata og metoder inne i en struktur. Du kan også spesifisere medlemmene som private, offentlige og interne. Det skal bemerkes at i motsetning til klasser, kan du ikke ha feltinitialiserere for ikke-statiske felt i strukturer. Derfor er uttalelser som følgende i en struktur ikke gyldige.

int bredde = 10;

int høyde = 15;

Du kan uansett initialisere statiske medlemmer i strengene dine. Følgende er derfor en gyldig uttalelse i en struktur.

statisk int-område = 0;

La oss nå legge til noen metoder for strukturen. Her er den oppdaterte versjonen av Rectangle-strukturen vi opprettet tidligere. Legg merke til bruken av den parameteriserte konstruktøren.

struct Rektangel

    {

int bredde;

int høyde;

offentlig rektangel (int bredde, int høyde)

        {

denne.bredde = bredde;

dette. høyde = høyde;

        }

offentlig int GetArea ()

        {

returner dette. bredde * dette. høyde;

        }

    }

Merk at selv om en struktur ikke tillater deg å definere en eksplisitt parameterløs konstruktør i den, kan du alltid ha parameterkonstruktører inne i en struktur. I likhet med en klasse kan du også ha overbelastede konstruktører i en struktur også. Slik kan du sette verdier ved hjelp av konstruktøren til Rectangle struct og deretter få området ved å påkalle GetArea () -metoden. Det skal bemerkes at du i likhet med en klasse kan ha statiske og ikke-statiske metoder inne i en struktur.

statisk tomrom Main (streng [] args)

        {

Rektangelrektangel = nytt rektangel (10, 15);

int område = rektangel.GetArea ();

Console.WriteLine ("Området er:" + area.ToString ());

Console.Read ();

        }

Som en klasse, gir en struct støtte for eiendommer og indekserer. En stor forskjell mellom en struktur og en klasse er at i motsetning til en klasse støtter ikke en struktur arv - du kan ikke ha en struktur som utvider en annen klasse eller en struktur. Imidlertid, i likhet med en klasse, kan en struct implementere et grensesnitt. Her er et kodeeksempel som illustrerer dette.

grensesnitt IRektangel

    {

int GetArea ();

    }

struct Rektangel: IR-rektangel

    {

int bredde;

int høyde;

offentlig rektangel (int bredde, int høyde)

        {

denne.bredde = bredde;

dette. høyde = høyde;

        }

offentlig int GetArea ()

        {

returner dette. bredde * dette. høyde;

        }

    }

Velge mellom en klasse og en struktur

Nå kommer vi til et interessant punkt i debatten. Når skal vi bruke en struktur over en klasse og omvendt?

Som vi diskuterte tidligere i denne artikkelen, opprettes en forekomst av en struktur i stabelen mens en forekomst av en klasse opprettes i den administrerte dyngen. Tildeling og omsetning av verdityper er billigere enn referansetyper. En struktur er et godt valg når du trenger å lage en sammensatt datatype som inneholder noen få datamedlemmer. Ideelt sett bør størrelsen på dataelementene til en struktur være mindre enn 16 byte. Du kan velge en struktur når du ønsker å bygge en liten sammensatt datastruktur som har verdisemantikk og inneholder bare noen få datamedlemmer. Ved å bruke struktur i slike tilfeller kan du unngå overhead forbundet med søppeloppsamling.

Du bør følge de anbefalte beste praksis når du arbeider med strukturer. Du bør unngå å bruke en struktur som er av større størrelse enn det som anbefales i denne artikkelen. Vær også oppmerksom på at bestått forekomster av strukturer til metoder er dyrere når det gjelder ytelse enn bestått forekomster av klasser. Det er tilrådelig å bruke strukturer når du arbeider med små datastrukturer. Du kan lære mer om dette emnet fra denne MSDN-artikkelen.

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