Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lernen Klassenobjekte vs Strukturobjekte | Einführung in die Objektorientierte Programmierung (OOP)
C# Jenseits der Grundlagen

bookKlassenobjekte vs Strukturobjekte

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 entscheidend, da das Übergeben von einfachen Werten wie int, float oder double an Methoden sich von der Übergabe komplexer Objekte und Strukturen an Methoden unterscheidet. Im Folgenden wird ein Beispiel betrachtet, um dieses Konzept besser zu verstehen.

Es wird ein einfaches Struktur-Objekt erstellt und an eine Methode übergeben. Der Wert wird innerhalb der Methode geändert, um zu sehen, was mit dem Wert des ursprünglichen Objekts geschieht:

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}"); } }

Die Ausgabe zeigt, dass der Wert von passedObject aktualisiert wurde, während der Wert von originalObject unverändert blieb. Dies verdeutlicht, dass beim Übergeben eines Struktur-Objekts an eine Methode eine Kopie dieses Objekts erstellt und an die Methode übergeben wird, das heißt, es wird per Wert übergeben.

Nun wird exakt derselbe Code verwendet, wobei lediglich der Begriff struct durch class ersetzt wird:

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}"); } }

Sie werden feststellen, dass sich die Ausgabe geändert hat – sowohl das passedObject als auch das originalObject haben diesmal denselben Wert. Dies beweist, dass beim Übergeben eines Klassenobjekts an eine Methode eine Referenz auf das Originalobjekt übergeben wird, sodass Änderungen an passedObject auch originalObject verändern.

Diese Eigenschaft gilt auch beim Zuweisen von Objekten zu Variablen. Im Folgenden ein Beispiel, das das Verhalten eines Struktur-Objekts zeigt:

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}"); } }

Der gleiche Code, aber dieses Mal für ein Klassenobjekt:

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. Klassenobjekte sind:

2. Der folgende Code demonstriert die Verwendung von Klassenobjekten mit Listen und Dictionaries. Die Kommentare im Code erläutern die Funktionsweise. Lies den Code und wähle die Option, die die korrekte Ausgabe zeigt. Der Code ist zwar umfangreich, eignet sich jedoch hervorragend als Übung zum Lesen von Code.

question mark

Klassenobjekte sind:

Select the correct answer

question mark

Der folgende Code demonstriert die Verwendung von Klassenobjekten mit Listen und Dictionaries. Die Kommentare im Code erläutern die Funktionsweise. Lies den Code und wähle die Option, die die korrekte Ausgabe zeigt. Der Code ist zwar umfangreich, eignet sich jedoch hervorragend als Übung zum Lesen von Code.

Select the correct answer

War alles klar?

Wie können wir es verbessern?

Danke für Ihr Feedback!

Abschnitt 3. Kapitel 5

Fragen Sie AI

expand

Fragen Sie AI

ChatGPT

Fragen Sie alles oder probieren Sie eine der vorgeschlagenen Fragen, um unser Gespräch zu beginnen

Awesome!

Completion rate improved to 2.04

bookKlassenobjekte vs Strukturobjekte

Swipe um das Menü anzuzeigen

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 entscheidend, da das Übergeben von einfachen Werten wie int, float oder double an Methoden sich von der Übergabe komplexer Objekte und Strukturen an Methoden unterscheidet. Im Folgenden wird ein Beispiel betrachtet, um dieses Konzept besser zu verstehen.

Es wird ein einfaches Struktur-Objekt erstellt und an eine Methode übergeben. Der Wert wird innerhalb der Methode geändert, um zu sehen, was mit dem Wert des ursprünglichen Objekts geschieht:

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}"); } }

Die Ausgabe zeigt, dass der Wert von passedObject aktualisiert wurde, während der Wert von originalObject unverändert blieb. Dies verdeutlicht, dass beim Übergeben eines Struktur-Objekts an eine Methode eine Kopie dieses Objekts erstellt und an die Methode übergeben wird, das heißt, es wird per Wert übergeben.

Nun wird exakt derselbe Code verwendet, wobei lediglich der Begriff struct durch class ersetzt wird:

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}"); } }

Sie werden feststellen, dass sich die Ausgabe geändert hat – sowohl das passedObject als auch das originalObject haben diesmal denselben Wert. Dies beweist, dass beim Übergeben eines Klassenobjekts an eine Methode eine Referenz auf das Originalobjekt übergeben wird, sodass Änderungen an passedObject auch originalObject verändern.

Diese Eigenschaft gilt auch beim Zuweisen von Objekten zu Variablen. Im Folgenden ein Beispiel, das das Verhalten eines Struktur-Objekts zeigt:

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}"); } }

Der gleiche Code, aber dieses Mal für ein Klassenobjekt:

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. Klassenobjekte sind:

2. Der folgende Code demonstriert die Verwendung von Klassenobjekten mit Listen und Dictionaries. Die Kommentare im Code erläutern die Funktionsweise. Lies den Code und wähle die Option, die die korrekte Ausgabe zeigt. Der Code ist zwar umfangreich, eignet sich jedoch hervorragend als Übung zum Lesen von Code.

question mark

Klassenobjekte sind:

Select the correct answer

question mark

Der folgende Code demonstriert die Verwendung von Klassenobjekten mit Listen und Dictionaries. Die Kommentare im Code erläutern die Funktionsweise. Lies den Code und wähle die Option, die die korrekte Ausgabe zeigt. Der Code ist zwar umfangreich, eignet sich jedoch hervorragend als Übung zum Lesen von Code.

Select the correct answer

War alles klar?

Wie können wir es verbessern?

Danke für Ihr Feedback!

Abschnitt 3. Kapitel 5
some-alt