Programiranje

Kako delati s strukturami v jeziku C #

Medtem ko med razredom in strukturo obstaja veliko podobnosti, obstaja tudi nekaj izrazitih razlik. Najpomembneje pa je, da je struktura za razliko od razreda vrednostni tip. Torej, medtem ko so primerki razreda shranjeni v kopici, so primerki strukture shranjeni v kupčku.

Ko se primerek strukture posreduje metodi, se vedno prenese po vrednosti. To je v nasprotju s tem, kar se zgodi, ko primerek razreda prenesemo na metodo - primerek se pošlje po sklicu.

Strukture programiranja v jeziku C #

Evo, kako izgleda sintaksa za razglasitev strukture.

strukt

{

// Podatkovni člani in članske funkcije strukture

}

Naslednji delček kode prikazuje, kako izgleda tipična definicija strukture.

struct Pravokotnik

    {

širina javnega int;

višina javnega int;

    }

Zdaj lahko dodelite vrednosti članom strukture, ki ste jo že določili, kot je prikazano v spodnjem delčku kode.

Pravokotnik pravokotnik = nov pravokotnik ();

pravokotnik.širina = 10;

pravokotnik.visina = 15;

Zgornji delček kode ustvari primerek strukture Pravokotnik in dodeli vrednosti javnim članom. Upoštevajte, da lahko v strukturi imate podatke o članih in metode. Člane lahko določite tudi kot zasebne, javne in notranje. Upoštevati je treba, da za razliko od razredov v strukturah ne morete imeti pobudnikov polj za nestatična polja. Izjave, kot so naslednje v strukturi, niso veljavne.

int širina = 10;

int višina = 15;

Statične člane lahko v svojih strukturah vseeno inicializirate. Zato je naslednja veljavna izjava znotraj strukture.

statično int območje = 0;

Zdaj dodajmo nekaj metod strukturi. Tu je posodobljena različica strukture Rectangle, ki smo jo ustvarili prej. Upoštevajte uporabo parametriziranega konstruktorja.

struct Pravokotnik

    {

int širina;

int višina;

javni pravokotnik (int širina, int višina)

        {

this.width = širina;

this.height = višina;

        }

javni int GetArea ()

        {

vrni this.width * this.height;

        }

    }

Upoštevajte, da tudi če vam struktura ne omogoča, da znotraj nje definirate eksplicitni konstruktor brez parametrov, lahko vedno imate konstruktorje parametrov znotraj strukture. Podobno kot v razredu lahko tudi v strukturi imate preobremenjene konstruktorje. Tukaj je opisano, kako lahko s pomočjo konstruktorja strukture Rectangle nastavite vrednosti in nato dobite območje s pomočjo metode GetArea (). Treba je opozoriti, da lahko podobno kot razred imate statične in nestatične metode v strukturi.

statična praznina Main (string [] args)

        {

Pravokotnik pravokotnik = nov pravokotnik (10, 15);

int area = pravokotnik.GetArea ();

Console.WriteLine ("Območje je:" + area.ToString ());

Console.Read ();

        }

Tako kot razred tudi struktura nudi podporo za lastnosti in indeksirnike. Ena glavnih razlik med struct in razredom je, da za razliko od razreda struct ne podpira dedovanja - ne morete imeti strukture, ki razširja drug razred ali struct. Vendar lahko podobno kot razred tudi struktura izvaja vmesnik. Tu je primer kode, ki to ponazarja.

vmesnik IRectangle

    {

int GetArea ();

    }

struct Pravokotnik: IRectangle

    {

int širina;

int višina;

javni pravokotnik (int širina, int višina)

        {

this.width = širina;

this.height = višina;

        }

javni int GetArea ()

        {

vrni this.width * this.height;

        }

    }

Izbira med predavanjem in strukturo

Zdaj smo prišli do zanimive točke razprave. Kdaj naj uporabimo strukturo nad razredom in obratno?

Kot smo že omenili v tem članku, se v strukturi ustvari primerek strukture, medtem ko se primerek razreda ustvari v upravljanem kupu. Dodelitev in sprostitev vrst vrednosti sta cenejša od referenčnih vrst. Struktura je dobra izbira, kadar morate ustvariti sestavljeni podatkovni tip, ki bi vseboval nekaj podatkovnih članov. V idealnem primeru bi morala biti velikost podatkovnih članov strukture manjša od 16 bajtov. Za strukturo se lahko odločite, kadar želite zgraditi majhno sestavljeno podatkovno strukturo, ki ima vrednostno semantiko in vsebuje le nekaj podatkovnih članov. Z uporabo struct v takih primerih se lahko izognete režijskim stroškom, povezanim z zbiranjem smeti.

Pri delu s konstrukcijami upoštevajte priporočene najboljše prakse. Izogibajte se uporabi strukture, ki je večje velikosti od priporočene v tem članku. Upoštevajte tudi, da je posredovanje primerov struktur metodam dražje glede na zmogljivost kot posredovanje primerkov razredov. Pri delu z majhnimi podatkovnimi strukturami je priporočljivo uporabljati strukture. Več o tej temi lahko izveste v tem članku MSDN.

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