C# Static Keyword: Statische Variablen, Methoden und Klassen meistern
C# Static Keyword
Dieser Leitfaden erklärt das static Schlüsselwort in C#, deckt statische Variablen, Methoden und Klassen mit klaren, realen Beispielen ab.
In C# bewirkt die Anwendung des static Schlüsselworts auf ein Member, dass eine einzelne gemeinsame Instanz für alle Objekte dieses Typs erstellt wird. Statt dass jede Instanz ihre eigene Kopie hält, lebt das statische Member einmal pro Typ.
Statische Variablen in C#
Wenn ein Feld als static deklariert wird, können Sie direkt über den Klassennamen darauf zugreifen, ohne ein Objekt zu erstellen.
using System;
namespace StaticKeyword {
class Student {
// statische Variable, geteilt von allen Studenten
public static string department = "Computer Science";
}
class Program {
static void Main(string[] args) {
// Zugriff auf statisches Feld über Klassennamen
Console.WriteLine("Department: " + Student.department);
Console.ReadLine();
}
}
}
Ausgabe
Department: Computer Science
Das Feld department wird von jeder Student Instanz geteilt, daher referenzieren wir es als Student.department.
Statische vs. Instanzvariablen
Instanzvariablen gehören einzelnen Objekten, jedes mit eigener Kopie. Beispiel:
class Student {
public string studentName;
}
class Program {
static void Main(string[] args) {
Student s1 = new Student();
Student s2 = new Student();
}
}
Hier haben s1 und s2 separate studentName Felder. Im Gegensatz dazu ist ein statisches Feld für alle Instanzen gemeinsam und ohne Objekterstellung zugänglich.
Beispiel: Statische vs. Instanzvariablen
using System;
namespace StaticKeyword {
class Student {
public static string schoolName = "Programiz School"; // geteilt
public string studentName; // einzigartig
}
class Program {
static void Main(string[] args) {
Student s1 = new Student();
s1.studentName = "Ram";
Console.WriteLine("Name: " + s1.studentName); // Instanz
Console.WriteLine("School: " + Student.schoolName); // statisch
Student s2 = new Student();
s2.studentName = "Shyam";
Console.WriteLine("Name: " + s2.studentName);
Console.WriteLine("School: " + Student.schoolName);
Console.ReadLine();
}
}
}
Ausgabe
Name: Ram School: Programiz School Name: Shyam School: Programiz School
Das statische Feld schoolName ist für alle Studenten identisch, was es speichereffizient und logisch konsistent macht.
Statische Methoden in C#
Statische Methoden werden auf der Klasse selbst aufgerufen, nicht auf einer Instanz. Sie können nur auf andere statische Member zugreifen.
class Test {
public static void Display() {
// Implementierung
}
}
class Program {
static void Main(string[] args) {
Test.Display();
}
}
Alle Objekte von Test teilen dieselbe Display Methode, daher rufen Sie sie über den Klassennamen auf.
Beispiel: Statische und nicht-statische Methoden
using System;
namespace StaticKeyword {
class Test {
public void Display1() {
Console.WriteLine("Non static method");
}
public static void Display2() {
Console.WriteLine("Static method");
}
}
class Program {
static void Main(string[] args) {
Test t1 = new Test();
t1.Display1(); // Instanzaufruf
Test.Display2(); // statischer Aufruf
Console.ReadLine();
}
}
}
Ausgabe
Non static method Static method
Hinweis: Die Main Methode selbst ist statisch, was ihr Ausführung ohne Instanz ermöglicht.
Statische Klassen
Eine statische Klasse kann nicht instanziiert werden und darf nur statische Member enthalten. Sie eignet sich zum Gruppieren von Hilfsmethoden.
using System;
namespace StaticKeyword {
static class Test {
static int a = 5;
static void Display() {
Console.WriteLine("Static method");
}
static void Main(string[] args) {
// Test t1 = new Test(); // ❌ Kompilierfehler
Console.WriteLine(a);
Display();
}
}
}
Der Versuch, Test zu instanziieren, führt zu Kompilierfehlern CS0723 und CS0712, was ihre statische Natur bestätigt.
Statische Klassen können nicht vererbt werden. Zum Beispiel:
static class A { /* ... */ }
// class B : A { /* ... */ } // ❌ Fehler
Auf statische Member innerhalb der Klasse zugreifen
Innerhalb derselben Klasse können Sie auf statische Felder und Methoden direkt verweisen, ohne den Klassenqualifizierer.
using System;
namespace StaticKeyword {
class Test {
static int age = 25;
public static void Display() {
Console.WriteLine("Static method");
}
static void Main(string[] args) {
Console.WriteLine(age); // direkter Zugriff
Display(); // direkter Zugriff
Console.ReadLine();
}
}
}
Ausgabe
25 Static method
Hier werden age und Display ohne Präfix Test. verwendet.
C Sprache
- C# Klassen & Objekte: Fundamente für robustes OOP
- C# Zugriffsmodifizierer verstehen: Public, Private, Protected, Internal und mehr
- C# this Schlüsselwort meistern
- C# Abstrakte Klassen & Methoden meistern: Praktischer Leitfaden
- C# Geschachtelte Klassen verstehen: Definition, Verwendung und Vererbung
- C# Partielle Klassen und Methoden verstehen
- Versiegelte Klassen und Methoden in C# meistern
- Java static erklärt: Variablen, Methoden und Blöcke – Praxisbeispiele
- Polymorphie in C++: Praktischer Leitfaden
- Datenabstraktion in C++: Interface-Implementierung-Trennung