Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Leer Klasse-Objecten Versus Struct-Objecten | Introductie tot Objectgeoriënteerd Programmeren (OOP)
C# Verder dan de Basis

bookKlasse-Objecten Versus Struct-Objecten

Klasse-objecten kunnen, net als structs, ook worden opgeslagen in Arrays, Dictionaries en Lijsten. Het is echter belangrijk om te weten dat klasse-objecten worden doorgegeven via referentie terwijl struct-objecten worden doorgegeven via waarde.

Dit concept is belangrijk omdat het doorgeven van eenvoudige waarden zoals int, float of double aan methoden verschilt van het doorgeven van complexe objecten en structuren aan methoden. Laten we een voorbeeld bekijken om dit concept beter te begrijpen.

Je maakt een eenvoudig struct-object en geeft dit door aan een methode. Je wijzigt de waarde binnen de methode en bekijkt wat er gebeurt met de waarde van het oorspronkelijke object:

index.cs

index.cs

copy
123456789101112131415161718192021222324252627
using System; // Defining a simple structure struct Example { public int value; } public class ConsoleApp { static void exampleMethod(Example passedObject) { passedObject.value += 10; Console.WriteLine($"passedObject: {passedObject.value}"); } public static void Main(string[] args) { // Creating and initialising an object Example originalObject = new Example(); originalObject.value = 7; // Passing that object into a method exampleMethod(originalObject); // Checking the value of the originalObject Console.WriteLine($"originalObject: {originalObject.value}"); } }

De uitvoer laat zien dat de waarde van passedObject is bijgewerkt, terwijl de waarde van originalObject ongewijzigd is gebleven. Dit toont aan dat wanneer je een struct-object aan een methode doorgeeft, er een duplicaat van dat object wordt gemaakt en doorgegeven aan de methode, met andere woorden, het wordt door waarde doorgegeven.

Laten we nu exact dezelfde code gebruiken, waarbij we alleen de term struct vervangen door class:

index.cs

index.cs

copy
123456789101112131415161718192021222324252627
using System; // Defining a simple class class Example { public int value; } public class ConsoleApp { static void exampleMethod(Example passedObject) { passedObject.value += 10; Console.WriteLine($"passedObject: {passedObject.value}"); } public static void Main(string[] args) { // Creating and initialising an object Example originalObject = new Example(); originalObject.value = 7; // Passing that object into a method exampleMethod(originalObject); // Checking the value of the originalObject Console.WriteLine($"originalObject: {originalObject.value}"); } }

Je zult merken dat de uitvoer is veranderd - zowel het passedObject als het originalObject hebben deze keer dezelfde waarde. Dit bewijst dat wanneer je een klasse-object aan een methode doorgeeft, er een referentie naar het originele object aan de methode wordt doorgegeven, waardoor wijzigingen aan passedObject ook originalObject wijzigen.

Deze eigenschap geldt ook bij het toewijzen van objecten aan variabelen. Hieronder volgt een voorbeeld dat het gedrag van een struct-object laat zien:

index.cs

index.cs

copy
12345678910111213141516171819202122232425
using System; struct Num { public int value; } public class ConsoleApp { public static void Main(string[] args) { // Creating and initiating 'a' Num a = new Num(); a.value = 7; // Creating 'b' and setting it equal to a. Num b = a; Console.WriteLine($"a is {a.value} and b is {b.value}"); // Now we change the value of 'b' to something else b.value = 9; Console.WriteLine($"a is {a.value} and b is {b.value}"); } }

Dezelfde code, maar deze keer voor een klasse-object:

index.cs

index.cs

copy
12345678910111213141516171819202122232425
using System; class Num { public int value; } public class ConsoleApp { public static void Main(string[] args) { // Creating and initiating 'a' Num a = new Num(); a.value = 7; // Creating 'b' and setting it equal to a. Num b; b = a; Console.WriteLine($"a is {a.value} and b is {b.value}"); // Now we change the value of 'b' to something else b.value = 9; Console.WriteLine($"a is {a.value} and b is {b.value}"); } }

1. Klasse-objecten zijn:

2. De onderstaande code demonstreert het gebruik van klasse-objecten met lijsten en woordenboeken. De code wordt uitgelegd in de opmerkingen. Lees de code en kies de optie die de juiste uitvoer weergeeft. De code is misschien lang, maar het is een goede oefening in code lezen.

question mark

Klasse-objecten zijn:

Select the correct answer

question mark

De onderstaande code demonstreert het gebruik van klasse-objecten met lijsten en woordenboeken. De code wordt uitgelegd in de opmerkingen. Lees de code en kies de optie die de juiste uitvoer weergeeft. De code is misschien lang, maar het is een goede oefening in code lezen.

Select the correct answer

Was alles duidelijk?

Hoe kunnen we het verbeteren?

Bedankt voor je feedback!

Sectie 3. 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 why structs are passed by value and classes by reference?

Can you provide a real-world scenario where this difference matters?

What happens if I modify a property of a class object inside a method?

Awesome!

Completion rate improved to 2.04

bookKlasse-Objecten Versus Struct-Objecten

Veeg om het menu te tonen

Klasse-objecten kunnen, net als structs, ook worden opgeslagen in Arrays, Dictionaries en Lijsten. Het is echter belangrijk om te weten dat klasse-objecten worden doorgegeven via referentie terwijl struct-objecten worden doorgegeven via waarde.

Dit concept is belangrijk omdat het doorgeven van eenvoudige waarden zoals int, float of double aan methoden verschilt van het doorgeven van complexe objecten en structuren aan methoden. Laten we een voorbeeld bekijken om dit concept beter te begrijpen.

Je maakt een eenvoudig struct-object en geeft dit door aan een methode. Je wijzigt de waarde binnen de methode en bekijkt wat er gebeurt met de waarde van het oorspronkelijke object:

index.cs

index.cs

copy
123456789101112131415161718192021222324252627
using System; // Defining a simple structure struct Example { public int value; } public class ConsoleApp { static void exampleMethod(Example passedObject) { passedObject.value += 10; Console.WriteLine($"passedObject: {passedObject.value}"); } public static void Main(string[] args) { // Creating and initialising an object Example originalObject = new Example(); originalObject.value = 7; // Passing that object into a method exampleMethod(originalObject); // Checking the value of the originalObject Console.WriteLine($"originalObject: {originalObject.value}"); } }

De uitvoer laat zien dat de waarde van passedObject is bijgewerkt, terwijl de waarde van originalObject ongewijzigd is gebleven. Dit toont aan dat wanneer je een struct-object aan een methode doorgeeft, er een duplicaat van dat object wordt gemaakt en doorgegeven aan de methode, met andere woorden, het wordt door waarde doorgegeven.

Laten we nu exact dezelfde code gebruiken, waarbij we alleen de term struct vervangen door class:

index.cs

index.cs

copy
123456789101112131415161718192021222324252627
using System; // Defining a simple class class Example { public int value; } public class ConsoleApp { static void exampleMethod(Example passedObject) { passedObject.value += 10; Console.WriteLine($"passedObject: {passedObject.value}"); } public static void Main(string[] args) { // Creating and initialising an object Example originalObject = new Example(); originalObject.value = 7; // Passing that object into a method exampleMethod(originalObject); // Checking the value of the originalObject Console.WriteLine($"originalObject: {originalObject.value}"); } }

Je zult merken dat de uitvoer is veranderd - zowel het passedObject als het originalObject hebben deze keer dezelfde waarde. Dit bewijst dat wanneer je een klasse-object aan een methode doorgeeft, er een referentie naar het originele object aan de methode wordt doorgegeven, waardoor wijzigingen aan passedObject ook originalObject wijzigen.

Deze eigenschap geldt ook bij het toewijzen van objecten aan variabelen. Hieronder volgt een voorbeeld dat het gedrag van een struct-object laat zien:

index.cs

index.cs

copy
12345678910111213141516171819202122232425
using System; struct Num { public int value; } public class ConsoleApp { public static void Main(string[] args) { // Creating and initiating 'a' Num a = new Num(); a.value = 7; // Creating 'b' and setting it equal to a. Num b = a; Console.WriteLine($"a is {a.value} and b is {b.value}"); // Now we change the value of 'b' to something else b.value = 9; Console.WriteLine($"a is {a.value} and b is {b.value}"); } }

Dezelfde code, maar deze keer voor een klasse-object:

index.cs

index.cs

copy
12345678910111213141516171819202122232425
using System; class Num { public int value; } public class ConsoleApp { public static void Main(string[] args) { // Creating and initiating 'a' Num a = new Num(); a.value = 7; // Creating 'b' and setting it equal to a. Num b; b = a; Console.WriteLine($"a is {a.value} and b is {b.value}"); // Now we change the value of 'b' to something else b.value = 9; Console.WriteLine($"a is {a.value} and b is {b.value}"); } }

1. Klasse-objecten zijn:

2. De onderstaande code demonstreert het gebruik van klasse-objecten met lijsten en woordenboeken. De code wordt uitgelegd in de opmerkingen. Lees de code en kies de optie die de juiste uitvoer weergeeft. De code is misschien lang, maar het is een goede oefening in code lezen.

question mark

Klasse-objecten zijn:

Select the correct answer

question mark

De onderstaande code demonstreert het gebruik van klasse-objecten met lijsten en woordenboeken. De code wordt uitgelegd in de opmerkingen. Lees de code en kies de optie die de juiste uitvoer weergeeft. De code is misschien lang, maar het is een goede oefening in code lezen.

Select the correct answer

Was alles duidelijk?

Hoe kunnen we het verbeteren?

Bedankt voor je feedback!

Sectie 3. Hoofdstuk 5
some-alt