TOC

This article has been localized into Dutch by the community.

Geavanceerde onderwerpen:

Structs

De C# struct is een lichtgewicht alternatief voor een class. Hij kan bijna hetzelfde doen als een class, maar het is minder "duur" om een struct te gebruiken dan een class. De reden hiervoor is enigszins technisch, maar om wat te noemen: Nieuwe exemplaren van een class worden op de hoop gegooid, terwijl nieuw gebouwde structs gestapeld worden. Verder heb je niets te maken met referenties naar een struct, zoals bij classes, maar in plaats daarvan werk je direct met het struct exemplaar. Dit betekent ook, dat als je een struct aan een functie verbindt, dan is het met een waarde en niet als referentie. Hierover is meer te lezen in het hoofdstuk over parameters.

Je zou dus structs moeten gebruiken als je eenvoudige data structuren wilt weergeven, en vooral als je weet dat je er een heleboel van wilt hebben. Er zijn tal van voorbeelden in het .NET framework waar Microsoft structs heeft gebruikt in plaats van classes, bv. de Point, Rectangle en Color struct.

Nu eerst een voorbeeld van een struct en daarna bespreken we een paar van de beperkingen van structs t.o.v. classes:

class Program
{
    static void Main(string[] args)
    {
        Car car;

        car = new Car("Blue");
        Console.WriteLine(car.Describe());

        car = new Car("Red");
        Console.WriteLine(car.Describe());

        Console.ReadKey();
    }
}

struct Car
{
    private string color;

    public Car(string color)
    {
        this.color = color;
    }

    public string Describe()
    {
        return "This car is " + Color;
    }

    public string Color
    {
        get { return color; }
        set { color = value; }
    }
}

De oplettende lezer ziet dat dit precies dezelfde code is als gebruikt werd bij de introductie van classes, afgezien van de verandering van class naar struct. Dit laat zien hoe overeenkomstig de twee concepten zijn. Maar wat zijn dan de verschillen, behalve de technische details die aan het begin van dit hoofdstuk werden genoemd?

Allereerst, velden kunnen niet geïnitialiseerd worden, wat betekent dat je een lid niet kan declareren zoals hier:

private string color = "Blue";

Als je een constructor declareert, moeten alle velden toegewezen worden voordat de constructor verlaten kan worden. Een struct komt met een default constructor, maar zodra je er voor kiest om er zelf een te definiëren, moet je ook alle velden erin initialiseren. Dat betekent ook dat je niet je eigen parameterloze contructor kunt declareren (alle struct constructors hebben op zijn minste één parameter). In bovenstaand voorbeeld kenden we een waarde toe aan het 'color' veld. Als we dat niet hadden gedaan, dan zou de compiler protesteren.

Een struct kan niet erven (inherit) van andere classes of van structs, en classes kunnen niet van structs erven. Een struct erft van de Object class, maar dat is het dan voor wat betreft inheritance en structs. Maar ze ondersteunen wel interfaces, en dat betekent dat jouw structs gebruikelijke interfaces kunnen implementeren.


This article has been fully translated into the following languages: Is your preferred language not on the list? Click here to help us translate this article into your language!