Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Leer Het `static` Sleutelwoord | OOP Essentials
C# Verder dan de Basis

bookHet `static` Sleutelwoord

Een belangrijk sleutelwoord dat je waarschijnlijk al vaak bent tegengekomen, is het sleutelwoord static. In de C# Basis Cursus werd vermeld dat static wordt gebruikt bij het definiëren van globale variabelen - variabelen die buiten een specifieke methode staan:

index.cs

index.cs

copy
1234567891011
using System; class ConsoleApp { static int val = 10; static void Main() { Console.WriteLine($"The value is {val}"); } }

Het was destijds een handige manier om het sleutelwoord static te beschrijven, omdat verwacht werd dat de lezer mogelijk nog geen kennis had van objecten of klassen. Als je nu echter naar de code kijkt, zul je beseffen dat val in feite een veld is van de klasse ConsoleApp. Merk echter op dat de klasse ConsoleApp enigszins verschilt van de klassen die je normaal aanmaakt. Dit komt doordat ConsoleApp het programma zelf vertegenwoordigt en er geen object van ConsoleApp bestaat. Hier kom je later op terug.

Aangezien een klasse slechts een blauwdruk is, meer een lege huls, bevat deze normaal gesproken zelf geen gegevens. In plaats daarvan maak je objecten met behulp van die blauwdruk en sla je gegevens op en krijg je toegang tot gegevens via die objecten - zoals eerder uitgelegd:

index.cs

index.cs

copy
12345678910111213141516171819202122232425262728
using System; class Complex { public int real; public int img; public Complex(int real, int img) { this.real = real; this.img = img; } } class ConsoleApp { static int val = 10; static void Main() { Complex c = new Complex(5, 10); // We can use and update the field of 'c' which is an instance. Console.WriteLine(c.real); c.real = 7; Console.WriteLine(c.real); } }

Zelfs binnen een klasse, wanneer je toegang krijgt tot deze velden, doe je dit via een object. Bijvoorbeeld in een constructor maak je in feite gebruik van de gegevens die zijn doorgegeven door het object dat de constructormethode heeft aangeroepen:

index.cs

index.cs

copy
12345678
public Complex(int real, int img) { // 'int real' and 'int img' contain the data which was passed // 'this.real' refers to the 'real' field of the object which is calling this constructor // same is the case for 'this.img' this.real = real; this.img = img; }

Op dezelfde manier, ook in andere methoden, wanneer je velden benadert, benader je in feite de velden van objecten die die methoden aanroepen, en niet van de klasse zelf, omdat een klasse normaal gesproken geen gegevens bevat.

Er is echter een manier om gegevens direct in een klasse op te slaan en een eigenschap toegankelijk te maken zonder een object te hoeven aanmaken. Dit kan door dat veld of die methode eenvoudigweg static te maken:

index.cs

index.cs

copy
123456789101112131415161718192021222324252627282930313233343536373839
using System; class Complex { public int real; public int img; // A static field can contain data // It is set to private because we don't want it to be manually modifiable from outside // This will track the total number of 'Complex' objects created private static int numbers = 0; public Complex(int real, int img) { this.real = real; this.img = img; numbers += 1; } // A static method // A static method or field can be accessed using the 'ClassName.PropertyName' syntax (see below) public static int getTotalComplexNumbers() { return numbers; } } class ConsoleApp { static void Main() { Console.WriteLine(Complex.getTotalComplexNumbers()); // 0 new Complex(1, 2); Console.WriteLine(Complex.getTotalComplexNumbers()); // 1 new Complex(2, 3); Console.WriteLine(Complex.getTotalComplexNumbers()); // 2 } }

Aangezien de ConsoleApp of de hoofdklasse van elk programma, die het programma zelf vertegenwoordigt, geen objecten kan hebben, moeten hun methoden en velden statisch zijn. Daarom is de Main-methode ook static:

index.cs

index.cs

copy
1234
static void Main() { // code }

1. Kan een klasse direct gegevens opslaan?

2. Wat is de juiste syntaxis om het veld value te wijzigen?

question mark

Kan een klasse direct gegevens opslaan?

Select the correct answer

question mark

Wat is de juiste syntaxis om het veld value te wijzigen?

Select the correct answer

Was alles duidelijk?

Hoe kunnen we het verbeteren?

Bedankt voor je feedback!

Sectie 4. Hoofdstuk 5

Vraag AI

expand

Vraag AI

ChatGPT

Vraag wat u wilt of probeer een van de voorgestelde vragen om onze chat te starten.

Suggested prompts:

Can you explain more about the difference between static and non-static fields?

Why does the Main method have to be static in C#?

Can you give an example of when to use a static field or method?

Awesome!

Completion rate improved to 2.04

bookHet `static` Sleutelwoord

Veeg om het menu te tonen

Een belangrijk sleutelwoord dat je waarschijnlijk al vaak bent tegengekomen, is het sleutelwoord static. In de C# Basis Cursus werd vermeld dat static wordt gebruikt bij het definiëren van globale variabelen - variabelen die buiten een specifieke methode staan:

index.cs

index.cs

copy
1234567891011
using System; class ConsoleApp { static int val = 10; static void Main() { Console.WriteLine($"The value is {val}"); } }

Het was destijds een handige manier om het sleutelwoord static te beschrijven, omdat verwacht werd dat de lezer mogelijk nog geen kennis had van objecten of klassen. Als je nu echter naar de code kijkt, zul je beseffen dat val in feite een veld is van de klasse ConsoleApp. Merk echter op dat de klasse ConsoleApp enigszins verschilt van de klassen die je normaal aanmaakt. Dit komt doordat ConsoleApp het programma zelf vertegenwoordigt en er geen object van ConsoleApp bestaat. Hier kom je later op terug.

Aangezien een klasse slechts een blauwdruk is, meer een lege huls, bevat deze normaal gesproken zelf geen gegevens. In plaats daarvan maak je objecten met behulp van die blauwdruk en sla je gegevens op en krijg je toegang tot gegevens via die objecten - zoals eerder uitgelegd:

index.cs

index.cs

copy
12345678910111213141516171819202122232425262728
using System; class Complex { public int real; public int img; public Complex(int real, int img) { this.real = real; this.img = img; } } class ConsoleApp { static int val = 10; static void Main() { Complex c = new Complex(5, 10); // We can use and update the field of 'c' which is an instance. Console.WriteLine(c.real); c.real = 7; Console.WriteLine(c.real); } }

Zelfs binnen een klasse, wanneer je toegang krijgt tot deze velden, doe je dit via een object. Bijvoorbeeld in een constructor maak je in feite gebruik van de gegevens die zijn doorgegeven door het object dat de constructormethode heeft aangeroepen:

index.cs

index.cs

copy
12345678
public Complex(int real, int img) { // 'int real' and 'int img' contain the data which was passed // 'this.real' refers to the 'real' field of the object which is calling this constructor // same is the case for 'this.img' this.real = real; this.img = img; }

Op dezelfde manier, ook in andere methoden, wanneer je velden benadert, benader je in feite de velden van objecten die die methoden aanroepen, en niet van de klasse zelf, omdat een klasse normaal gesproken geen gegevens bevat.

Er is echter een manier om gegevens direct in een klasse op te slaan en een eigenschap toegankelijk te maken zonder een object te hoeven aanmaken. Dit kan door dat veld of die methode eenvoudigweg static te maken:

index.cs

index.cs

copy
123456789101112131415161718192021222324252627282930313233343536373839
using System; class Complex { public int real; public int img; // A static field can contain data // It is set to private because we don't want it to be manually modifiable from outside // This will track the total number of 'Complex' objects created private static int numbers = 0; public Complex(int real, int img) { this.real = real; this.img = img; numbers += 1; } // A static method // A static method or field can be accessed using the 'ClassName.PropertyName' syntax (see below) public static int getTotalComplexNumbers() { return numbers; } } class ConsoleApp { static void Main() { Console.WriteLine(Complex.getTotalComplexNumbers()); // 0 new Complex(1, 2); Console.WriteLine(Complex.getTotalComplexNumbers()); // 1 new Complex(2, 3); Console.WriteLine(Complex.getTotalComplexNumbers()); // 2 } }

Aangezien de ConsoleApp of de hoofdklasse van elk programma, die het programma zelf vertegenwoordigt, geen objecten kan hebben, moeten hun methoden en velden statisch zijn. Daarom is de Main-methode ook static:

index.cs

index.cs

copy
1234
static void Main() { // code }

1. Kan een klasse direct gegevens opslaan?

2. Wat is de juiste syntaxis om het veld value te wijzigen?

question mark

Kan een klasse direct gegevens opslaan?

Select the correct answer

question mark

Wat is de juiste syntaxis om het veld value te wijzigen?

Select the correct answer

Was alles duidelijk?

Hoe kunnen we het verbeteren?

Bedankt voor je feedback!

Sectie 4. Hoofdstuk 5
some-alt