Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lernen Das `static` Schlüsselwort | OOP Essentials
C# Über die Grundlagen Hinaus
course content

Kursinhalt

C# Über die Grundlagen Hinaus

C# Über die Grundlagen Hinaus

1. Zusätzliche Strukturen & Dateiverarbeitung
2. Strukturen & Enumeratoren
3. Einführung in die Objektorientierte Programmierung (OOP)
4. OOP Essentials
5. OOP-Prinzipien

book
Das `static` Schlüsselwort

cs

index

copy
1234567891011
using System; class ConsoleApp { static int val = 10; static void Main() { Console.WriteLine($"The value is {val}"); } }

Es war damals eine bequeme Möglichkeit, das static Schlüsselwort zu beschreiben, da erwartet wurde, dass der Leser zu diesem Zeitpunkt möglicherweise 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 ConsoleApp Klasse ist. Beachten Sie jedoch, dass die ConsoleApp Klasse sich leicht von den Klassen unterscheidet, die wir normalerweise erstellen. Das liegt daran, dass ConsoleApp das Programm selbst darstellt und es kein Objekt der ConsoleApp gibt. Wir werden auf diesen Teil gleich zurückkommen.

Da eine Klasse nur ein Bauplan ist, eher wie eine hohle Schale, enthält sie normalerweise keine Daten von sich aus. Stattdessen erstellen wir Objekte mit diesem Bauplan und speichern und greifen dann auf Daten von diesen Objekten zu - wie zuvor erklärt:

cs

index

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, wenn wir auf diese Felder zugreifen, tun wir dies über ein Objekt. Zum Beispiel in einem Konstruktor verwenden wir im Grunde die Daten, die von dem Objekt übergeben wurden, das die Konstruktormethode aufgerufen hat:

cs

index

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

Ähnlich ist es auch bei anderen Methoden, wenn wir auf Felder zugreifen, greifen wir im Grunde auf die Felder von Objekten zu, die diese Methoden aufrufen, und nicht auf die der Klasse selbst, da die Klasse normalerweise keine 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. Das können wir erreichen, indem wir das Feld oder die Methode einfach static machen:

cs

index

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, das das Programm selbst darstellt, keine Objekte haben kann, müssen wir ihre Methoden und Felder statisch machen. Deshalb ist die Main-Methode ebenfalls static:

cs

index

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

1. Kann eine Klasse direkt Daten speichern?

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

Kann eine Klasse direkt Daten speichern?

Kann eine Klasse direkt Daten speichern?

Wählen Sie die richtige Antwort aus

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

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

Wählen Sie die richtige Antwort aus

War alles klar?

Wie können wir es verbessern?

Danke für Ihr Feedback!

Abschnitt 4. Kapitel 5
We're sorry to hear that something went wrong. What happened?
some-alt