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.
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!