Menu
Coddy logo textTech

Statische Felder & Methoden

Teil des Abschnitts Objektorientierte Programmierung der C#-Journey von Coddy — Lektion 12 von 70.

Bisher gehörte jedes Feld und jede Methode, die wir erstellt haben, zu einzelnen Objekten. Aber manchmal benötigt man Daten oder Verhalten, die zur Klasse selbst gehören und von allen Instanzen geteilt werden. Hier kommt das Schlüsselwort static ins Spiel.

Ein statisches Feld wird von allen Objekten einer Klasse gemeinsam genutzt. Es gibt nur eine Kopie, unabhängig davon, wie viele Instanzen Sie erstellen:

public class Player
{
    public static int TotalPlayers = 0;
    public string Name { get; set; }
    
    public Player(string name)
    {
        Name = name;
        TotalPlayers++;
    }
}

Jedes Mal, wenn ein neuer Player erstellt wird, erhöht sich TotalPlayers. Alle Spieler teilen sich diesen selben Zähler.

Eine statische Methode gehört zur Klasse und kann aufgerufen werden, ohne ein Objekt zu erstellen:

public class Calculator
{
    public static int Add(int a, int b)
    {
        return a + b;
    }
}

// Wird auf der Klasse aufgerufen, nicht auf einer Instanz
int result = Calculator.Add(5, 3);

Beachten Sie, dass Sie auf statische Member über den Klassennamen zugreifen und nicht über eine Objektreferenz. Statische Methoden können nicht auf Instanzfelder zugreifen oder this verwenden, da sie zu keinem bestimmten Objekt gehören.

Sie haben bereits statische Member verwendet, ohne es zu merken. Console.WriteLine() ist eine statische Methode und Math.PI ist ein statisches Feld.

challenge icon

Aufgabe

Einfach

Lassen Sie uns ein Auftragsverfolgungssystem erstellen, das statische Member verwendet, um alle in Ihrer Anwendung aufgegebenen Bestellungen zu verfolgen.

Sie werden zwei Dateien erstellen, um Ihren Code zu organisieren:

  • Order.cs: Definieren Sie eine Order-Klasse im Namespace OrderSystem. Jede Bestellung sollte eine Instanzeigenschaft OrderId (int) und CustomerName (string) haben. Die Klasse sollte außerdem die Gesamtzahl der erstellten Bestellungen mithilfe eines statischen Feldes TotalOrders verfolgen und eine statische Methode GetNextOrderId() bereitstellen, die die nächste verfügbare Bestell-ID (beginnend bei 1) zurückgibt. Der Konstruktor sollte einen Kundennamen akzeptieren, die Bestell-ID automatisch mithilfe der statischen Methode zuweisen und den Gesamtzähler der Bestellungen erhöhen.
  • Program.cs: Erstellen Sie in Ihrer Hauptdatei Bestellungen basierend auf der Eingabe und zeigen Sie deren Details zusammen mit der Gesamtzahl der Bestellungen an.

Sie erhalten zwei Eingaben, die Kundennamen für zwei separate Bestellungen darstellen.

Geben Sie für jede Bestellung die Details in diesem Format aus:

Order #{OrderId} - Customer: {CustomerName}

Geben Sie nach dem Erstellen beider Bestellungen die Gesamtzahl aus:

Total Orders: {TotalOrders}

Wenn die Eingaben beispielsweise Alice und Bob sind, sollte die Ausgabe wie folgt aussehen:

Order #1 - Customer: Alice
Order #2 - Customer: Bob
Total Orders: 2

Spickzettel

Das Schlüsselwort static erstellt Member, die zur Klasse selbst gehören und nicht zu einzelnen Instanzen.

Statische Felder werden von allen Objekten einer Klasse gemeinsam genutzt. Es existiert nur eine einzige Kopie, unabhängig davon, wie viele Instanzen erstellt werden:

public class Player
{
    public static int TotalPlayers = 0;
    public string Name { get; set; }
    
    public Player(string name)
    {
        Name = name;
        TotalPlayers++;
    }
}

Statische Methoden gehören zur Klasse und können aufgerufen werden, ohne ein Objekt zu erstellen:

public class Calculator
{
    public static int Add(int a, int b)
    {
        return a + b;
    }
}

// Wird auf der Klasse aufgerufen, nicht auf einer Instanz
int result = Calculator.Add(5, 3);

Auf statische Member wird über den Klassennamen zugegriffen, nicht über eine Objektreferenz. Statische Methoden können nicht auf Instanzfelder zugreifen oder this verwenden, da sie zu keinem spezifischen Objekt gehören.

Häufige Beispiele für statische Member sind Console.WriteLine() (statische Methode) und Math.PI (statisches Feld).

Probier es selbst

using System;
using OrderSystem;

class Program
{
    public static void Main(string[] args)
    {
        // Kundennamen lesen
        string customer1 = Console.ReadLine();
        string customer2 = Console.ReadLine();

        // TODO: Erstellen Sie zwei Order-Objekte mit den Kundennamen

        // TODO: Geben Sie die Details jeder Bestellung im folgenden Format aus:
        // Order #{OrderId} - Customer: {CustomerName}

        // TODO: Geben Sie die Gesamtzahl der Bestellungen im folgenden Format aus:
        // Total Orders: {TotalOrders}
    }
}
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Objektorientierte Programmierung