Klasseconstructors
Een klasseconstructor is hetzelfde als een structconstructor. Het is een methode die wordt uitgevoerd wanneer een object wordt aangemaakt.
De syntaxis voor het aanmaken van een constructor is als volgt:
index.cs
1234567class className { // ... other class code public className() { // code } }
Bijvoorbeeld:
index.cs
1234567891011121314151617using System; class Player { public Player() { Console.WriteLine("A new player is created"); } } public class HelloWorld { public static void Main(string[] args) { Player p1 = new Player(); Player p2 = new Player(); Player p3 = new Player(); } }
Uit de uitvoer blijkt dat de Console.WriteLine
-instructie binnen de Player
-constructor wordt uitgevoerd telkens wanneer een nieuw object wordt aangemaakt.
In C# 9 en oudere versies van C# zijn er enkele verschillen tussen constructors van structs en klassen. In oudere versies kun je bijvoorbeeld geen parameterloze constructors voor structs maken, maar in C# 10 en nieuwere versies wordt dit wel ondersteund. Het wordt aanbevolen om de nieuwste versie van C#-compilers te gebruiken, anders kun je fouten tegenkomen bij het compileren van bepaalde code.
Hieronder volgt een voorbeeldcode uit het hoofdstuk Struct Constructors. De term static
wordt uitgelegd in de opmerkingen, omdat deze hier relevanter is. Het is echter niet noodzakelijk om dit volledig te begrijpen, aangezien dit concept later in detail zal worden behandeld.
In tegenstelling tot normale velden kan een static veld gegevens vasthouden, zelfs als er geen object van die klasse is. Statische velden hebben dezelfde waarde voor alle objecten, dus het wijzigen van de waarde van een statisch veld vanuit één object wijzigt deze voor alle objecten. De programmaklasse vertegenwoordigt het programma zelf, dus als het statische veld een lid is van de 'Program'-klasse, fungeert het als een globale variabele.
index.cs
1234567891011121314151617181920212223using System; struct Program { public static int totalPlayers = 0; struct Player { public int id; public Player() { id = totalPlayers++; Console.WriteLine($"New Player Object Created With ID {id}"); } } static void Main(string[] args) { Player player1 = new Player(); Player player2 = new Player(); Player player3 = new Player(); } }
Om de Player
-struct om te zetten naar een klasse, hoeft u alleen de term struct
te vervangen door class
:
index.cs
12345678910111213141516171819202122232425262728using System; class Program { // Unlike normal fields, a 'static' field can hold data even if there's no object. // Static fields have the same value for all objects. // Changing the value of a static field from one object changes it for all objects. // In this case the static field is part of the 'Program' class which represents the program itself // Therefore this field is essentially a global variable public static int totalPlayers = 0; struct Player { public int id; public Player() { id = totalPlayers++; Console.WriteLine($"New Player Object Created With ID {id}"); } } static void Main(string[] args) { Player player1 = new Player(); Player player2 = new Player(); Player player3 = new Player(); } }
Op vergelijkbare wijze kunnen er ook constructors met argumenten worden gebruikt. Deze methode wordt doorgaans toegepast om de initialisatie van klassevelden te vereenvoudigen:
index.cs
12345678910111213141516171819202122232425262728using System; class Point { public double x; public double y; public Point(double x, double y) { // 'this' keyword is also used in classes just like how its used in structs this.x = x; this.y = y; } public void showCoordinates() { Console.WriteLine($"({x}, {y})"); } } class Program { static void Main(string[] args) { Point p1 = new Point(50, 70); Point p2 = new Point(70, 90); p1.showCoordinates(); p2.showCoordinates(); } }
Tot nu toe zijn de meeste basisconcepten van Classes
behandeld. Afgaand op de syntaxis en het gedrag lijken Classes
precies hetzelfde als Structs
, maar dat is niet het geval. Zoals vermeld in het eerste hoofdstuk van deze sectie, zijn Structs een beperkte versie van Classes die alleen basisfunctionaliteit bieden, terwijl de mogelijkheden van Classes veel complexer en uitgebreider zijn. In deze sectie zijn alle functies behandeld die overeenkomen tussen Classes
en Structs
. In de volgende twee secties leer je alle details van classes en objectgeoriënteerd programmeren.
1. Wanneer wordt een constructor-methode aangeroepen?
2. Wat zal de naam zijn van een constructormethode in een klasse genaamd "Animal"?
3. Welke keyword wordt gebruikt vóór een constructornaam?
Bedankt voor je feedback!
Vraag AI
Vraag AI
Vraag wat u wilt of probeer een van de voorgestelde vragen om onze chat te starten.
Awesome!
Completion rate improved to 2.04
Klasseconstructors
Veeg om het menu te tonen
Een klasseconstructor is hetzelfde als een structconstructor. Het is een methode die wordt uitgevoerd wanneer een object wordt aangemaakt.
De syntaxis voor het aanmaken van een constructor is als volgt:
index.cs
1234567class className { // ... other class code public className() { // code } }
Bijvoorbeeld:
index.cs
1234567891011121314151617using System; class Player { public Player() { Console.WriteLine("A new player is created"); } } public class HelloWorld { public static void Main(string[] args) { Player p1 = new Player(); Player p2 = new Player(); Player p3 = new Player(); } }
Uit de uitvoer blijkt dat de Console.WriteLine
-instructie binnen de Player
-constructor wordt uitgevoerd telkens wanneer een nieuw object wordt aangemaakt.
In C# 9 en oudere versies van C# zijn er enkele verschillen tussen constructors van structs en klassen. In oudere versies kun je bijvoorbeeld geen parameterloze constructors voor structs maken, maar in C# 10 en nieuwere versies wordt dit wel ondersteund. Het wordt aanbevolen om de nieuwste versie van C#-compilers te gebruiken, anders kun je fouten tegenkomen bij het compileren van bepaalde code.
Hieronder volgt een voorbeeldcode uit het hoofdstuk Struct Constructors. De term static
wordt uitgelegd in de opmerkingen, omdat deze hier relevanter is. Het is echter niet noodzakelijk om dit volledig te begrijpen, aangezien dit concept later in detail zal worden behandeld.
In tegenstelling tot normale velden kan een static veld gegevens vasthouden, zelfs als er geen object van die klasse is. Statische velden hebben dezelfde waarde voor alle objecten, dus het wijzigen van de waarde van een statisch veld vanuit één object wijzigt deze voor alle objecten. De programmaklasse vertegenwoordigt het programma zelf, dus als het statische veld een lid is van de 'Program'-klasse, fungeert het als een globale variabele.
index.cs
1234567891011121314151617181920212223using System; struct Program { public static int totalPlayers = 0; struct Player { public int id; public Player() { id = totalPlayers++; Console.WriteLine($"New Player Object Created With ID {id}"); } } static void Main(string[] args) { Player player1 = new Player(); Player player2 = new Player(); Player player3 = new Player(); } }
Om de Player
-struct om te zetten naar een klasse, hoeft u alleen de term struct
te vervangen door class
:
index.cs
12345678910111213141516171819202122232425262728using System; class Program { // Unlike normal fields, a 'static' field can hold data even if there's no object. // Static fields have the same value for all objects. // Changing the value of a static field from one object changes it for all objects. // In this case the static field is part of the 'Program' class which represents the program itself // Therefore this field is essentially a global variable public static int totalPlayers = 0; struct Player { public int id; public Player() { id = totalPlayers++; Console.WriteLine($"New Player Object Created With ID {id}"); } } static void Main(string[] args) { Player player1 = new Player(); Player player2 = new Player(); Player player3 = new Player(); } }
Op vergelijkbare wijze kunnen er ook constructors met argumenten worden gebruikt. Deze methode wordt doorgaans toegepast om de initialisatie van klassevelden te vereenvoudigen:
index.cs
12345678910111213141516171819202122232425262728using System; class Point { public double x; public double y; public Point(double x, double y) { // 'this' keyword is also used in classes just like how its used in structs this.x = x; this.y = y; } public void showCoordinates() { Console.WriteLine($"({x}, {y})"); } } class Program { static void Main(string[] args) { Point p1 = new Point(50, 70); Point p2 = new Point(70, 90); p1.showCoordinates(); p2.showCoordinates(); } }
Tot nu toe zijn de meeste basisconcepten van Classes
behandeld. Afgaand op de syntaxis en het gedrag lijken Classes
precies hetzelfde als Structs
, maar dat is niet het geval. Zoals vermeld in het eerste hoofdstuk van deze sectie, zijn Structs een beperkte versie van Classes die alleen basisfunctionaliteit bieden, terwijl de mogelijkheden van Classes veel complexer en uitgebreider zijn. In deze sectie zijn alle functies behandeld die overeenkomen tussen Classes
en Structs
. In de volgende twee secties leer je alle details van classes en objectgeoriënteerd programmeren.
1. Wanneer wordt een constructor-methode aangeroepen?
2. Wat zal de naam zijn van een constructormethode in een klasse genaamd "Animal"?
3. Welke keyword wordt gebruikt vóór een constructornaam?
Bedankt voor je feedback!