Klassenkonstruktoren
Ein Klassenkonstruktor ist identisch mit einem Strukturkonstruktor. Es handelt sich um eine Methode, die beim Erstellen eines Objekts ausgeführt wird.
Die Syntax zur Erstellung eines Konstruktors ist wie folgt:
index.cs
1234567class className { // ... other class code public className() { // code } }
Beispiel:
index.cs
1234567891011121314151617using System; class Player { public Player() { Console.WriteLine("A new player is created"); } } public class HelloWorld { public static void Main(string[] args) { Player p1 = new Player(); Player p2 = new Player(); Player p3 = new Player(); } }
Aus der Ausgabe ist ersichtlich, dass die Anweisung Console.WriteLine
im Konstruktor der Klasse Player
jedes Mal ausgeführt wird, wenn ein neues Objekt erstellt wird.
In C# 9 und älteren Versionen von C# gibt es einige Unterschiede zwischen den Konstruktoren von Structs und Klassen. Zum Beispiel können in älteren Versionen parameterlose Konstruktoren für Structs nicht erstellt werden, während dies in C# 10 und neueren Versionen unterstützt wird. Es wird empfohlen, die neueste Version des C#-Compilers zu verwenden, da sonst beim Kompilieren einiger Codes Fehler auftreten können.
Im Folgenden befindet sich ein Beispielcode aus dem Kapitel Struct-Konstruktoren. Der Begriff static
wird in den Kommentaren erläutert, da er hier relevanter ist. Es ist jedoch nicht notwendig, ihn vollständig zu verstehen, da dieses Konzept in späteren Abschnitten ausführlich erklärt wird.
Im Gegensatz zu normalen Feldern kann ein static-Feld Daten speichern, auch wenn kein Objekt dieser Klasse existiert. Statische Felder haben für alle Objekte denselben Wert, daher ändert sich der Wert eines statischen Feldes für alle Objekte, wenn er von einem Objekt geändert wird. Die Program-Klasse repräsentiert das Programm selbst, daher verhält sich ein statisches Feld, das Mitglied der 'Program'-Klasse ist, wie eine globale Variable.
index.cs
1234567891011121314151617181920212223using System; struct Program { public static int totalPlayers = 0; struct Player { public int id; public Player() { id = totalPlayers++; Console.WriteLine($"New Player Object Created With ID {id}"); } } static void Main(string[] args) { Player player1 = new Player(); Player player2 = new Player(); Player player3 = new Player(); } }
Um die Player
-Struktur in eine Klasse umzuwandeln, muss lediglich der Begriff struct
durch class
ersetzt werden:
index.cs
12345678910111213141516171819202122232425262728using System; class Program { // Unlike normal fields, a 'static' field can hold data even if there's no object. // Static fields have the same value for all objects. // Changing the value of a static field from one object changes it for all objects. // In this case the static field is part of the 'Program' class which represents the program itself // Therefore this field is essentially a global variable public static int totalPlayers = 0; struct Player { public int id; public Player() { id = totalPlayers++; Console.WriteLine($"New Player Object Created With ID {id}"); } } static void Main(string[] args) { Player player1 = new Player(); Player player2 = new Player(); Player player3 = new Player(); } }
Ebenso können Konstruktoren auch Argumente enthalten. In der Regel wird diese Methode verwendet, um die Initialisierung von Klassenfeldern zu erleichtern:
index.cs
12345678910111213141516171819202122232425262728using System; class Point { public double x; public double y; public Point(double x, double y) { // 'this' keyword is also used in classes just like how its used in structs this.x = x; this.y = y; } public void showCoordinates() { Console.WriteLine($"({x}, {y})"); } } class Program { static void Main(string[] args) { Point p1 = new Point(50, 70); Point p2 = new Point(70, 90); p1.showCoordinates(); p2.showCoordinates(); } }
An diesem Punkt wurden die meisten Grundkonzepte der Classes
behandelt. Betrachtet man Syntax und Verhalten, scheinen Classes
und Structs
identisch zu sein, jedoch ist das tatsächlich nicht der Fall. Wie im ersten Kapitel dieses Abschnitts erwähnt, sind Strukturen eine eingeschränkte Version von Klassen, die nur grundlegende Funktionalitäten bieten, während die Eigenschaften von Klassen deutlich komplexer und umfangreicher sind. In diesem Abschnitt wurden alle Merkmale behandelt, die zwischen Classes
und Structs
ähnlich sind. In den nächsten beiden Abschnitten werden alle Feinheiten von Klassen und objektorientierter Programmierung vermittelt.
1. Wann wird eine Konstruktor-Methode aufgerufen?
2. Wie lautet der Name einer Konstruktormethode in einer Klasse namens "Animal"?
3. Welches Schlüsselwort wird vor einem Konstruktorname verwendet?
Danke für Ihr Feedback!
Fragen Sie AI
Fragen Sie AI
Fragen Sie alles oder probieren Sie eine der vorgeschlagenen Fragen, um unser Gespräch zu beginnen
Can you explain the main differences between classes and structs?
What are some advanced features of classes that structs don't have?
Can you give examples of when to use a class instead of a struct?
Awesome!
Completion rate improved to 2.04
Klassenkonstruktoren
Swipe um das Menü anzuzeigen
Ein Klassenkonstruktor ist identisch mit einem Strukturkonstruktor. Es handelt sich um eine Methode, die beim Erstellen eines Objekts ausgeführt wird.
Die Syntax zur Erstellung eines Konstruktors ist wie folgt:
index.cs
1234567class className { // ... other class code public className() { // code } }
Beispiel:
index.cs
1234567891011121314151617using System; class Player { public Player() { Console.WriteLine("A new player is created"); } } public class HelloWorld { public static void Main(string[] args) { Player p1 = new Player(); Player p2 = new Player(); Player p3 = new Player(); } }
Aus der Ausgabe ist ersichtlich, dass die Anweisung Console.WriteLine
im Konstruktor der Klasse Player
jedes Mal ausgeführt wird, wenn ein neues Objekt erstellt wird.
In C# 9 und älteren Versionen von C# gibt es einige Unterschiede zwischen den Konstruktoren von Structs und Klassen. Zum Beispiel können in älteren Versionen parameterlose Konstruktoren für Structs nicht erstellt werden, während dies in C# 10 und neueren Versionen unterstützt wird. Es wird empfohlen, die neueste Version des C#-Compilers zu verwenden, da sonst beim Kompilieren einiger Codes Fehler auftreten können.
Im Folgenden befindet sich ein Beispielcode aus dem Kapitel Struct-Konstruktoren. Der Begriff static
wird in den Kommentaren erläutert, da er hier relevanter ist. Es ist jedoch nicht notwendig, ihn vollständig zu verstehen, da dieses Konzept in späteren Abschnitten ausführlich erklärt wird.
Im Gegensatz zu normalen Feldern kann ein static-Feld Daten speichern, auch wenn kein Objekt dieser Klasse existiert. Statische Felder haben für alle Objekte denselben Wert, daher ändert sich der Wert eines statischen Feldes für alle Objekte, wenn er von einem Objekt geändert wird. Die Program-Klasse repräsentiert das Programm selbst, daher verhält sich ein statisches Feld, das Mitglied der 'Program'-Klasse ist, wie eine globale Variable.
index.cs
1234567891011121314151617181920212223using System; struct Program { public static int totalPlayers = 0; struct Player { public int id; public Player() { id = totalPlayers++; Console.WriteLine($"New Player Object Created With ID {id}"); } } static void Main(string[] args) { Player player1 = new Player(); Player player2 = new Player(); Player player3 = new Player(); } }
Um die Player
-Struktur in eine Klasse umzuwandeln, muss lediglich der Begriff struct
durch class
ersetzt werden:
index.cs
12345678910111213141516171819202122232425262728using System; class Program { // Unlike normal fields, a 'static' field can hold data even if there's no object. // Static fields have the same value for all objects. // Changing the value of a static field from one object changes it for all objects. // In this case the static field is part of the 'Program' class which represents the program itself // Therefore this field is essentially a global variable public static int totalPlayers = 0; struct Player { public int id; public Player() { id = totalPlayers++; Console.WriteLine($"New Player Object Created With ID {id}"); } } static void Main(string[] args) { Player player1 = new Player(); Player player2 = new Player(); Player player3 = new Player(); } }
Ebenso können Konstruktoren auch Argumente enthalten. In der Regel wird diese Methode verwendet, um die Initialisierung von Klassenfeldern zu erleichtern:
index.cs
12345678910111213141516171819202122232425262728using System; class Point { public double x; public double y; public Point(double x, double y) { // 'this' keyword is also used in classes just like how its used in structs this.x = x; this.y = y; } public void showCoordinates() { Console.WriteLine($"({x}, {y})"); } } class Program { static void Main(string[] args) { Point p1 = new Point(50, 70); Point p2 = new Point(70, 90); p1.showCoordinates(); p2.showCoordinates(); } }
An diesem Punkt wurden die meisten Grundkonzepte der Classes
behandelt. Betrachtet man Syntax und Verhalten, scheinen Classes
und Structs
identisch zu sein, jedoch ist das tatsächlich nicht der Fall. Wie im ersten Kapitel dieses Abschnitts erwähnt, sind Strukturen eine eingeschränkte Version von Klassen, die nur grundlegende Funktionalitäten bieten, während die Eigenschaften von Klassen deutlich komplexer und umfangreicher sind. In diesem Abschnitt wurden alle Merkmale behandelt, die zwischen Classes
und Structs
ähnlich sind. In den nächsten beiden Abschnitten werden alle Feinheiten von Klassen und objektorientierter Programmierung vermittelt.
1. Wann wird eine Konstruktor-Methode aufgerufen?
2. Wie lautet der Name einer Konstruktormethode in einer Klasse namens "Animal"?
3. Welches Schlüsselwort wird vor einem Konstruktorname verwendet?
Danke für Ihr Feedback!