Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lernen Das Schlüsselwort `static` | OOP-Grundlagen
C# Jenseits der Grundlagen

bookDas 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

index.cs

copy
1234567891011
using 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

index.cs

copy
12345678910111213141516171819202122232425262728
using 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

index.cs

copy
12345678
public 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

index.cs

copy
123456789101112131415161718192021222324252627282930313233343536373839
using 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

index.cs

copy
1234
static void Main() { // code }

1. Kann eine Klasse direkt Daten speichern?

2. Was ist die korrekte Syntax, um das Feld value zu ändern?

question mark

Kann eine Klasse direkt Daten speichern?

Select the correct answer

question mark

Was ist die korrekte Syntax, um das Feld value zu ändern?

Select the correct answer

War alles klar?

Wie können wir es verbessern?

Danke für Ihr Feedback!

Abschnitt 4. 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

Suggested prompts:

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

bookDas 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

index.cs

copy
1234567891011
using 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

index.cs

copy
12345678910111213141516171819202122232425262728
using 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

index.cs

copy
12345678
public 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

index.cs

copy
123456789101112131415161718192021222324252627282930313233343536373839
using 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

index.cs

copy
1234
static void Main() { // code }

1. Kann eine Klasse direkt Daten speichern?

2. Was ist die korrekte Syntax, um das Feld value zu ändern?

question mark

Kann eine Klasse direkt Daten speichern?

Select the correct answer

question mark

Was ist die korrekte Syntax, um das Feld value zu ändern?

Select the correct answer

War alles klar?

Wie können wir es verbessern?

Danke für Ihr Feedback!

Abschnitt 4. Kapitel 5
some-alt