Klasse-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
123456789101112131415161718192021222324252627using 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
123456789101112131415161718192021222324252627using 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
12345678910111213141516171819202122232425using 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
12345678910111213141516171819202122232425using 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.
Bedankt voor je feedback!
Vraag AI
Vraag AI
Vraag wat u wilt of probeer een van de voorgestelde vragen om onze chat te starten.
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
Klasse-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
123456789101112131415161718192021222324252627using 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
123456789101112131415161718192021222324252627using 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
12345678910111213141516171819202122232425using 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
12345678910111213141516171819202122232425using 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.
Bedankt voor je feedback!