TOC

This article has been localized into Dutch by the community.

Klassen:

Statische leden

Zoals we reeds gezien hebben, communiceren we normaal met een klasse door een nieuwe instantie te maken van die klasse en dan te werken met het resulterende object. In de meeste gevallen is dat waarvoor klassen gebruikt worden, dit geeft ons de mogelijkheid om meerdere kopieën van dezelfde klasse te instantiëren en de resulterende objecten te gebruiken op de gewenste manier. Soms willen we echter een klasse maken die we niet hoeven te instantiëren, of op z'n minst een klasse waarvan we de leden kunnen gebruiken zonder er eerst een object van te maken. Zo kan je bijvoorbeeld een klasse hebben die een variabele bevat die nooit verandert, ongeacht hoe of waar je die gebruikt. Dit noemen we een statisch lid (static member), omdat het altijd hetzelfde blijft.

Een klasse kan statisch zijn, en ze kan statische leden bevatten, zowel functies en velden. Een statische klasse kan niet geïnstantieerd worden en zal dus eigenlijk meer functioneren als een groepering van gerelateerde leden dan een eigenlijke klasse. Je kan er ook voor kiezen om een niet statische klasse te creëren, maar deze dan enkele statische leden te geven. Een niet statische klasse kan geïnstantieerd en gebruikt worden zoals een gewone klasse, maar je zal de statische leden niet kunnen gebruiken op een object van de klasse. Een statische klasse kan enkel statische leden bevatten.

Hier een voorbeeld van een statische klasse:

public static class Rectangle
{
    public static int CalculateArea(int width, int height)
    {
        return width * height;
    }
}

Zoals je kan zien gebruiken we het static keyword om de klasse te markeren als statisch en dan gebruiken we het opnieuw om de methode CalculateArea ook als statisch te marken. Als we dit niet op deze manier zouden doen, zou de compiler een melding geven aangezien we geen niet-statische leden kunnen aanmaken in een statisch klasse.

Om deze methode te gebruiken roepen we de klasse rechtstreeks aan, als volgt:

Console.WriteLine("The area is: " + Rectangle.CalculateArea(5, 4));

We zouden andere nuttige methoden kunnen toevoegen aan de Rectangle klasse, maar misschien vraag je je af waarom we de hoogte en breedte meegeven met de methode zelf in plaats van ze op te slaan binnen de klasse en ze dan van daar aan te roepen wanneer we ze nodig hebben. Omdat onze klasse statisch is! We zouden ze kunnen opslaan binnen deze klasse, maar dan kunnen we maar één hoogte en één breedte opslaan, want er is maar één versie van een statische klasse. Dit is zeer belangrijk om te begrijpen.

In plaats daarvan kunnen we de klasse niet statisch maken en dan kunnen we de CalculateArea functie dynamisch gebruiken uit deze klasse:

public class Rectangle
{
    private int width, height;

    public Rectangle(int width, int height)
    {
        this.width = width;
        this.height = height;
    }

    public void OutputArea()
    {
        Console.WriteLine("Area output: " + Rectangle.CalculateArea(this.width, this.height));
    }

    public static int CalculateArea(int width, int height)
    {
        return width * height;
    }
}

Zoals je kan zien hebben we een niet statische klasse gemaakt. We hebben ook een constructor toegevoegd die de hoogte en breedte aanvaard en toewijst aan onze instantie van de klasse. Dan hebben we ook de OutputArea methode toegevoegd, die de statische methode CalculateArea gebruikt om de oppervlakte te berekenen. Dit is een mooi voorbeeld van hoe je statische en niet statische leden kan gebruiken binnen een niet statische klasse.

Statische klassen worden vaak gebruikt als utility klassen, waar een aantal nuttige methoden (die soms niet samen horen, maar nergens anders lijken bij te passen) in verzameld worden. Sommige programmeurs vinden dit echter geen goede manier van werken.


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!