Programmering

Sådan arbejder du med strukturer i C #

Mens der er ligheder mellem en klasse og en struktur, er der også nogle forskellige forskelle. Vigtigst er det, at en struktur i modsætning til en klasse er en værditype. Så mens forekomster af en klasse er gemt i bunken, gemmes forekomster af en struktur i stakken.

Når en forekomst af en struktur sendes til en metode, sendes den altid efter værdi. Dette er i modsætning til hvad der sker, når vi overfører en forekomst af en klasse til en metode - forekomsten sendes som reference.

Programmering af strukturer i C #

Sådan ser syntaksen til at erklære en struktur ud.

struct

{

// Datamedlemmer og medlemsfunktioner i strukturen

}

Følgende kodestykke viser, hvordan en typisk strukturdefinition ser ud.

struct Rektangel

    {

offentlig int bredde;

offentlig int højde;

    }

Du kan nu tildele værdier til medlemmerne af strukturen, du har defineret tidligere som vist i kodestykket nedenfor.

Rektangelrektangel = nyt rektangel ();

rektangel. bredde = 10;

rektangel. højde = 15;

Ovenstående kodestykke opretter en forekomst af Rectangle-strukturen og tildeler værdier til de offentlige medlemmer af den. Bemærk, at du kan have både medlemsdata og metoder inde i en struktur. Du kan også angive medlemmerne som private, offentlige og interne. Det skal bemærkes, at i modsætning til klasser, kan du ikke have feltinitialisering for ikke-statiske felter i strukturer. Derfor er udsagn som følgende i en struktur ikke gyldige.

int bredde = 10;

int højde = 15;

Du kan alligevel initialisere statiske medlemmer i dine strukturer. Derfor er følgende en gyldig erklæring inde i en struktur.

statisk int-område = 0;

Lad os nu tilføje et par metoder til strukturen. Her er den opdaterede version af den rektangelstruktur, vi oprettede tidligere. Bemærk brugen af ​​den parametriserede konstruktør.

struct Rektangel

    {

int bredde;

int højde;

offentlig rektangel (int bredde, int højde)

        {

denne.bredde = bredde;

denne. højde = højde;

        }

offentlig int GetArea ()

        {

returner denne. bredde * denne. højde;

        }

    }

Bemærk, at selvom en struct ikke tillader dig at definere en eksplicit parameterløs konstruktør inde i den, kan du altid have parameterkonstruktører inde i en struct. I lighed med en klasse kan du også have overbelastede konstruktører i en struktur. Sådan kan du indstille værdier ved hjælp af konstruktøren af ​​Rectangle struct og derefter få området ved at påkalde GetArea () -metoden. Det skal bemærkes, at du i lighed med en klasse kan have statiske og ikke-statiske metoder inde i en struktur.

statisk ugyldigt Main (streng [] args)

        {

Rektangelrektangel = nyt rektangel (10, 15);

int område = rektangel.GetArea ();

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

Console.Read ();

        }

Ligesom en klasse yder en struct support til egenskaber og indeksatorer. En stor forskel mellem en struktur og en klasse er, at i modsætning til en klasse understøtter en struktur ikke arv - du kan ikke have en struktur, der udvider en anden klasse eller en struktur. I lighed med en klasse kan en struct imidlertid implementere en grænseflade. Her er et kodeeksempel, der illustrerer dette.

interface IR-rektangel

    {

int GetArea ();

    }

struct Rectangle: IR-rektangel

    {

int bredde;

int højde;

offentlig rektangel (int bredde, int højde)

        {

denne.bredde = bredde;

denne. højde = højde;

        }

offentlig int GetArea ()

        {

returner dette. bredde * dette. højde;

        }

    }

Valg mellem en klasse og en struktur

Nu kommer vi til et interessant debatpunkt. Hvornår skal vi bruge en struktur over en klasse og omvendt?

Som vi diskuterede tidligere i denne artikel oprettes en forekomst af en struktur i stakken, mens en forekomst af en klasse oprettes i den administrerede bunke. Tildeling og deallokation af værdityper er billigere end referencetyper. En struktur er et godt valg, når du har brug for at oprette en sammensat datatype, der indeholder nogle få datamedlemmer. Ideelt set skal størrelsen på datamedlemmerne i en struktur være mindre end 16 byte. Du kan vælge en struktur, når du ønsker at opbygge en lille sammensat datastruktur, der har værdisemantik og kun indeholder et par datamedlemmer. Når du bruger struct i sådanne tilfælde, kan du undgå omkostningerne forbundet med affaldsindsamling.

Du bør følge de anbefalede bedste fremgangsmåder, når du arbejder med structs. Du bør undgå at bruge en struktur, der har en større størrelse end det, der anbefales i denne artikel. Bemærk også, at bestående forekomster af strukturer til metoder er dyrere med hensyn til ydeevne end bestået forekomster af klasser. Det tilrådes at bruge strukturer, når du arbejder med små datastrukturer. Du kan lære mere om dette emne fra denne MSDN-artikel.