Kursinhalt
C# Über die Grundlagen Hinaus
C# Über die Grundlagen Hinaus
Klassenobjekte vs Struct-Objekte
Klassenobjekte können ebenso wie Strukturen in Arrays, Dictionaries und Listen gespeichert werden. Es ist jedoch wichtig zu beachten, dass Klassenobjekte als Referenz übergeben werden, während Struktur-Objekte als Wert übergeben werden.
Dieses Konzept ist wichtig, da das Übergeben einfacher Werte wie int
, float
oder double
an Methoden sich von der Übergabe komplexer Objekte und Strukturen an Methoden unterscheidet. Schauen wir uns ein Beispiel an, um dieses Konzept besser zu verstehen.
Wir werden ein einfaches Struktur-Objekt erstellen und es an eine Methode übergeben. Wir werden seinen Wert innerhalb der Methode ändern und sehen, was mit dem Wert des ursprünglichen Objekts passiert:
index
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}"); } }
Die Ausgabe zeigt, dass der Wert von passedObject
aktualisiert wurde, während der Wert von originalObject
unverändert blieb. Dies zeigt, dass, wenn wir ein Struct-Objekt in eine Methode übergeben, ein Duplikat dieses Objekts erstellt und in die Methode übergeben wird, oder mit anderen Worten, es wird by value übergeben.
Nun verwenden wir denselben Code, ändern jedoch den Begriff struct
in class
:
index
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}"); } }
Sie werden bemerken, dass sich die Ausgabe geändert hat - sowohl passedObject
als auch originalObject
haben diesmal denselben Wert. Dies beweist, dass, wenn wir ein Klassenobjekt in eine Methode übergeben, eine Referenz auf das ursprüngliche Objekt in die Methode übergeben wird, wodurch Änderungen an passedObject
auch originalObject
ändern.
Diese Eigenschaft gilt auch, wenn Objekte Variablen zugewiesen werden. Im Folgenden ist ein Beispiel, das das Verhalten eines Struct-Objekts zeigt:
index
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}"); } }
Der gleiche Code, aber diesmal für ein Klassenobjekt:
index
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. Klassenobjekte sind:
2. Der folgende Code demonstriert die Verwendung von Klassenobjekten mit Listen und Wörterbüchern. Der Code wird in den Kommentaren erklärt. Lesen Sie den Code und wählen Sie die Option, die die korrekte Ausgabe zeigt. Der Code könnte lang sein, aber es ist eine gute Übung zum Lesen von Code.
Danke für Ihr Feedback!