Das Schlüsselwort `static`
Ein wichtiges Schlüsselwort, dem Sie möglicherweise bereits häufig begegnet sind, ist das Schlüsselwort static
. Im C# Grundlagenkurs wurde erwähnt, dass static
verwendet wird, wenn globale Variablen definiert werden – Variablen, die außerhalb einer bestimmten Methode liegen:
index.cs
1234567891011using System; class ConsoleApp { static int val = 10; static void Main() { Console.WriteLine($"The value is {val}"); } }
Zu diesem Zeitpunkt war es eine bequeme Möglichkeit, das Schlüsselwort static
zu beschreiben, da davon ausgegangen wurde, dass der Leser noch keine Kenntnisse über Objekte oder Klassen hat. Wenn Sie sich jedoch jetzt den Code ansehen, werden Sie feststellen, dass val
im Grunde ein Feld der Klasse ConsoleApp
ist. Beachten Sie jedoch, dass sich die Klasse ConsoleApp
geringfügig von den Klassen unterscheidet, die Sie normalerweise erstellen. Das liegt daran, dass ConsoleApp
das Programm selbst repräsentiert und es kein Objekt der ConsoleApp
gibt. Auf diesen Teil kommen Sie gleich zurück.
Da eine Klasse lediglich einen Bauplan darstellt, eher wie eine leere Hülle, enthält sie normalerweise keine eigenen Daten. Stattdessen erstellen Sie mit diesem Bauplan Objekte und speichern und greifen dann auf Daten aus diesen Objekten zu – wie zuvor erläutert:
index.cs
12345678910111213141516171819202122232425262728using System; class Complex { public int real; public int img; public Complex(int real, int img) { this.real = real; this.img = img; } } class ConsoleApp { static int val = 10; static void Main() { Complex c = new Complex(5, 10); // We can use and update the field of 'c' which is an instance. Console.WriteLine(c.real); c.real = 7; Console.WriteLine(c.real); } }
Selbst innerhalb einer Klasse greift man beim Zugriff auf diese Felder über ein Objekt darauf zu. Zum Beispiel wird im Konstruktor im Wesentlichen die Daten verwendet, die vom Objekt übergeben wurden, das die Konstruktormethode aufgerufen hat:
index.cs
12345678public Complex(int real, int img) { // 'int real' and 'int img' contain the data which was passed // 'this.real' refers to the 'real' field of the object which is calling this constructor // same is the case for 'this.img' this.real = real; this.img = img; }
Ebenso greifst du in anderen Methoden beim Zugriff auf Felder im Grunde auf die Felder der Objekte zu, die diese Methoden aufrufen, und nicht auf die der Klasse selbst, da eine Klasse normalerweise keine eigenen Daten enthält.
Es gibt jedoch eine Möglichkeit, Daten direkt in einer Klasse zu speichern und eine Eigenschaft zugänglich zu machen, ohne ein Objekt erstellen zu müssen. Dies erreichst du, indem du das Feld oder die Methode einfach als static
deklarierst:
index.cs
123456789101112131415161718192021222324252627282930313233343536373839using System; class Complex { public int real; public int img; // A static field can contain data // It is set to private because we don't want it to be manually modifiable from outside // This will track the total number of 'Complex' objects created private static int numbers = 0; public Complex(int real, int img) { this.real = real; this.img = img; numbers += 1; } // A static method // A static method or field can be accessed using the 'ClassName.PropertyName' syntax (see below) public static int getTotalComplexNumbers() { return numbers; } } class ConsoleApp { static void Main() { Console.WriteLine(Complex.getTotalComplexNumbers()); // 0 new Complex(1, 2); Console.WriteLine(Complex.getTotalComplexNumbers()); // 1 new Complex(2, 3); Console.WriteLine(Complex.getTotalComplexNumbers()); // 2 } }
Da die ConsoleApp
oder die Hauptklasse eines Programms, die das Programm selbst repräsentiert, keine Objekte haben kann, müssen deren Methoden und Felder statisch sein. Aus diesem Grund ist auch die Main
-Methode static
:
index.cs
1234static void Main() { // code }
1. Kann eine Klasse direkt Daten speichern?
2. Was ist die korrekte Syntax, um das Feld value
zu ändern?
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 more about the difference between static and non-static fields?
Why does the Main method have to be static in C#?
Can you give an example of when to use a static field or method?
Awesome!
Completion rate improved to 2.04
Das Schlüsselwort `static`
Swipe um das Menü anzuzeigen
Ein wichtiges Schlüsselwort, dem Sie möglicherweise bereits häufig begegnet sind, ist das Schlüsselwort static
. Im C# Grundlagenkurs wurde erwähnt, dass static
verwendet wird, wenn globale Variablen definiert werden – Variablen, die außerhalb einer bestimmten Methode liegen:
index.cs
1234567891011using System; class ConsoleApp { static int val = 10; static void Main() { Console.WriteLine($"The value is {val}"); } }
Zu diesem Zeitpunkt war es eine bequeme Möglichkeit, das Schlüsselwort static
zu beschreiben, da davon ausgegangen wurde, dass der Leser noch keine Kenntnisse über Objekte oder Klassen hat. Wenn Sie sich jedoch jetzt den Code ansehen, werden Sie feststellen, dass val
im Grunde ein Feld der Klasse ConsoleApp
ist. Beachten Sie jedoch, dass sich die Klasse ConsoleApp
geringfügig von den Klassen unterscheidet, die Sie normalerweise erstellen. Das liegt daran, dass ConsoleApp
das Programm selbst repräsentiert und es kein Objekt der ConsoleApp
gibt. Auf diesen Teil kommen Sie gleich zurück.
Da eine Klasse lediglich einen Bauplan darstellt, eher wie eine leere Hülle, enthält sie normalerweise keine eigenen Daten. Stattdessen erstellen Sie mit diesem Bauplan Objekte und speichern und greifen dann auf Daten aus diesen Objekten zu – wie zuvor erläutert:
index.cs
12345678910111213141516171819202122232425262728using System; class Complex { public int real; public int img; public Complex(int real, int img) { this.real = real; this.img = img; } } class ConsoleApp { static int val = 10; static void Main() { Complex c = new Complex(5, 10); // We can use and update the field of 'c' which is an instance. Console.WriteLine(c.real); c.real = 7; Console.WriteLine(c.real); } }
Selbst innerhalb einer Klasse greift man beim Zugriff auf diese Felder über ein Objekt darauf zu. Zum Beispiel wird im Konstruktor im Wesentlichen die Daten verwendet, die vom Objekt übergeben wurden, das die Konstruktormethode aufgerufen hat:
index.cs
12345678public Complex(int real, int img) { // 'int real' and 'int img' contain the data which was passed // 'this.real' refers to the 'real' field of the object which is calling this constructor // same is the case for 'this.img' this.real = real; this.img = img; }
Ebenso greifst du in anderen Methoden beim Zugriff auf Felder im Grunde auf die Felder der Objekte zu, die diese Methoden aufrufen, und nicht auf die der Klasse selbst, da eine Klasse normalerweise keine eigenen Daten enthält.
Es gibt jedoch eine Möglichkeit, Daten direkt in einer Klasse zu speichern und eine Eigenschaft zugänglich zu machen, ohne ein Objekt erstellen zu müssen. Dies erreichst du, indem du das Feld oder die Methode einfach als static
deklarierst:
index.cs
123456789101112131415161718192021222324252627282930313233343536373839using System; class Complex { public int real; public int img; // A static field can contain data // It is set to private because we don't want it to be manually modifiable from outside // This will track the total number of 'Complex' objects created private static int numbers = 0; public Complex(int real, int img) { this.real = real; this.img = img; numbers += 1; } // A static method // A static method or field can be accessed using the 'ClassName.PropertyName' syntax (see below) public static int getTotalComplexNumbers() { return numbers; } } class ConsoleApp { static void Main() { Console.WriteLine(Complex.getTotalComplexNumbers()); // 0 new Complex(1, 2); Console.WriteLine(Complex.getTotalComplexNumbers()); // 1 new Complex(2, 3); Console.WriteLine(Complex.getTotalComplexNumbers()); // 2 } }
Da die ConsoleApp
oder die Hauptklasse eines Programms, die das Programm selbst repräsentiert, keine Objekte haben kann, müssen deren Methoden und Felder statisch sein. Aus diesem Grund ist auch die Main
-Methode static
:
index.cs
1234static void Main() { // code }
1. Kann eine Klasse direkt Daten speichern?
2. Was ist die korrekte Syntax, um das Feld value
zu ändern?
Danke für Ihr Feedback!