Hur man arbetar med struts i C #

Även om det finns många likheter mellan en klass och en struktur, finns det också några tydliga skillnader. Viktigast är att en struktur till skillnad från en klass är en värdetyp. Så medan instanser av en klass lagras i högen lagras instanser av en struct i stacken.

När en instans av en struktur skickas till en metod skickas den alltid efter värde. Detta står i kontrast till vad som händer när vi skickar en instans av en klass till en metod - förekomsten skickas genom referens.

Programmeringssträngar i C #

Så här ser syntaxen för att deklarera en struktur ut.

struct

{

//Data members and member functions of the struct

}

The following code snippet shows how a typical struct definition looks like.

struct Rectangle

    {

        public int width;

        public int height;

    }

Du kan nu tilldela värden till medlemmarna i strukturen som du har definierat tidigare som visas i kodavsnittet nedan.

Rectangle rectangle = new Rectangle();

rectangle.width = 10;

rectangle.height = 15;

Ovanstående kodavsnitt skapar en instans av Rectangle-strukturen och tilldelar värden till de offentliga medlemmarna av den. Observera att du kan ha både medlemsdata och metoder i en struktur. Du kan också ange medlemmarna som privata, offentliga och interna. Det bör noteras att till skillnad från klasser, kan du inte ha fältinitialiserare för icke-statiska fält i strukturer. Följaktligen är uttalanden som följande i en struktur inte giltiga.

int width = 10;

int height = 15;

Du kan initialisera statiska medlemmar i dina structts ändå. Följaktligen är följande ett giltigt uttalande i en struktur.

static int area = 0;

Låt oss nu lägga till några metoder i strukturen. Här är den uppdaterade versionen av Rectangle-strukturen som vi skapade tidigare. Notera användningen av den parametrerade konstruktören.

struct Rectangle

    {

        int width;

        int height;

        public Rectangle(int width, int height)

        {

            this.width = width;

            this.height = height;

        }

        public int GetArea()

        {

            return this.width * this.height;

        }

    }

Observera att även om en struct inte tillåter dig att definiera en explicit parameterlös konstruktör inuti den, kan du alltid ha parameterkonstruktörer inuti en struct. Liksom en klass kan du också ha överbelastade konstruktörer i en struktur. Så här kan du ställa in värden med konstruktorn för Rectangle struct och sedan hämta området genom att anropa GetArea () -metoden. Det bör noteras att i likhet med en klass kan du ha statiska och icke-statiska metoder inuti en struktur.

static void Main(string[] args)

        {

            Rectangle rectangle = new Rectangle(10, 15);

            int area = rectangle.GetArea();

            Console.WriteLine("The area is: " + area.ToString());

            Console.Read();

        }

Som en klass ger en struct stöd för fastigheter och indexerare. En stor skillnad mellan en struktur och en klass är att till skillnad från en klass stöder en struktur inte arv - du kan inte ha en struktur som utökar en annan klass eller en struktur. I likhet med en klass kan en struct implementera ett gränssnitt. Här är ett kodexempel som illustrerar detta.

 interface IRectangle

    {

        int GetArea();

    }

  struct Rectangle : IRectangle

    {

        int width;

        int height;

        public Rectangle(int width, int height)

        {

            this.width = width;

            this.height = height;

        }

        public int GetArea()

        {

            return this.width * this.height;

        }

    }

Att välja mellan en klass och en struktur

Nu kommer vi till en intressant debattpunkt. När ska vi använda en struktur över en klass och vice versa?

Som vi diskuterade tidigare i den här artikeln skapas en instans av en struct i stacken medan en instans av en klass skapas i den hanterade högen. Tilldelning och omfördelning av värdetyper är billigare än referenstyper. En struktur är ett bra val när du behöver skapa en sammansatt datatyp som skulle innehålla några datamedlemmar. Helst bör storleken på datamedlemmarna i en struktur vara mindre än 16 byte. Du kan välja en struktur när du vill bygga en liten sammansatt datastruktur som har värdessemantik och endast innehåller några få datamedlemmar. När du använder strukturen i sådana fall kan du undvika de allmänna kostnader som är förknippade med skräpuppsamlingen.

Du bör följa de rekommenderade bästa metoderna när du arbetar med structs. Du bör undvika att använda en struktur som är av större storlek än vad som rekommenderas i den här artikeln. Observera också att vidarebefordran av strukturer till metoder är mer kostsamma när det gäller prestanda än vidarebefordran av klasser. Det är lämpligt att använda strikt när du arbetar med små datastrukturer. Du kan lära dig mer om detta ämne från denna MSDN-artikel.