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.
Aufgabe
EinfachErstellen wir ein Auftragsverfolgungssystem, das statische Member verwendet, um alle in deiner Anwendung aufgegebenen Aufträge zu verfolgen.
Du erstellst zwei Dateien, um deinen Code zu organisieren:
Order.cs: Definiere eineOrder-Klasse im NamespaceOrderSystem. Jeder Auftrag sollte über eine InstanzeigenschaftOrderId(int) undCustomerName(string) verfügen. Die Klasse sollte außerdem die Gesamtzahl der erstellten Aufträge mithilfe eines statischen FeldsTotalOrdersverfolgen und eine statische MethodeGetNextOrderId()bereitstellen, die die nächste verfügbare Auftrags-ID zurückgibt (beginnend bei 1). Der Konstruktor sollte einen Kundennamen akzeptieren, die Auftrags-ID automatisch mithilfe der statischen Methode zuweisen und die Anzahl der Gesamtaufträge erhöhen.Program.cs: Erstelle in deiner Hauptdatei Aufträge basierend auf der Eingabe und gib ihre Details zusammen mit der Gesamtzahl der Aufträge aus.
Du erhältst zwei Eingaben, die Kundennamen für zwei separate Aufträge darstellen.
Gib für jeden Auftrag die Details in diesem Format aus:
Order #{OrderId} - Customer: {CustomerName}Nachdem beide Aufträge erstellt wurden, gib die Gesamtzahl aus:
Total Orders: {TotalOrders}Wenn die Eingaben beispielsweise Alice und Bob lauten, sollte die Ausgabe folgendermaßen aussehen:
Order #1 - Customer: Alice
Order #2 - Customer: Bob
Total Orders: 2Probier 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}
}
}
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Objektorientierte Programmierung
1Grundlagen der OOP
Externe DateienNamespaces & DirektivenEinführung in Klassen & ObjekteDas 'this'-SchlüsselwortMethoden und ParameterFelder vs. EigenschaftenKonstruktorenObjektinitialisiererWiederholung – Einfacher Taschenrechner4Vererbung
Grundlegende Vererbungs-(:)-SyntaxDas „base“-Schlüsselwort„virtual“- und „override“-SchlüsselwörterVersiegelte KlassenDie „object“-BasisklasseWiederholung – Mitarbeiterhierarchie7Erweiterte Funktionen
Überladen von OperatorenIndexer (this[])ToString()-ÜberschreibungErweiterungsmethodenRückblick – Benutzerdefinierte Liste10Entwurfsmuster Teil 1
Einführung in EntwurfsmusterThread-sicheres SingletonFactory-MusterObserver-Muster (Events)Strategy-Muster13Abschließende Herausforderungen
E-Learning-PlattformKomponente für SpielfigurenFahrzeugvermietungsdienst2Eigenschaften & statische Member
Automatisch implementierte EigenschaftenNur lesbare/schreibbare EigenschaftenStatische Felder & MethodenStatische KlassenMember mit Ausdruckskörpern5Polymorphie & Interfaces
Compile- vs. Laufzeit-PolymorphieInterface vs. abstrakte KlasseMehrere InterfacesExplizite InterfacesUpcasting & DowncastingWiederholung – Formenrechner3Klassenarchitektur
Instanz- vs. statische DatenSchlüsselwörter 'readonly' & 'const'Backing FieldsRückblick – Bankkontenverwaltung6Kapselung
ZugriffsmodifikatorenEigenschaften zur KapselungImplementierung der DatenkapselungMuster für UnveränderlichkeitRückblick – SchülerdatenÜbe selbstständig: Online-C#-Compiler