C# static

C# static ist ein Keyword, dass du verwenden kannst, um Klassen, Methoden uvm. als statisch zu deklarieren. Statisch bedeutet, dass du diesen Typ nicht instanziieren kannst (kein Objekt davon erstellen). Du kannst also kein Objekt einer statischen Klasse erstellen und auch nicht über ein Objekt auf statische Member (Felder, Eigenschaften, Methoden etc.) zugreifen. Stattdessen greifst du über den Klassennamen auf die Member zu.

Folgende wichtige Member können als static markiert werden:

Eine Klasse als C# static markieren

Innerhalb einer statischen Klasse kannst du statische Member deklarieren.

Im folgende Beispiel erstellen wir eine statische Klasse, Variable und Methode.

static class MainProgram
{ 
   public static int rebootCounter = 60; 

   public static void Run() 
   { 
      // Code hier
   } 
}

Gehen wir das Ganze nun etwas detaillierter anhand von einem praktischen Beispiel durch:

public static class Database
{
    private static List<int> dbNumbers = new List<int>();

    public static int AddToDb(int numberToSave)
    {
        dbNumbers.Add(numberToSave);
    }

    public static int GetByIndexFromDb(int index)
    {
        return dbNumbers[index];
    }
}

Unsere Klasse Database ist als statisch markiert, daher sind alle Member dieser Klasse ebenfalls statisch. Wenn du nun eine Methode der Database Klasse aufrufen möchtest, dann geht das üben den Klassennamen und dem Methodennamen z. B. Database.AddToDb(10);

class Program
{
    static void Main(string[] args)
    {
        int myNumber = 100;

        // Keine Objektinstanz nötig, Aufruf direkt über Klassenname
        Database.AddToDb(myNumber);
    }
}

Natürlich kannst du auch statische Methoden in einer nicht-statischen Klasse erstellen. Wichtig zu wissen ist aber, dass eine statische Methode keine anderen nicht-statischen Methoden aufrufen kann (statische Methoden können also nur andere statische Methoden aufrufen und auch nur auf statische Member zugreifen):

Statische Felder und Zugriffe

Du kannst einer nicht-statischen Klasse eine oder mehrere statische Methoden und andere nicht-statische Mitglieder hinzufügen. Wenn du deine Klasse also als Objekt instanziieren willst, kannst du bestimmte Member dieser Klasse also trotzdem als static markieren.

Du kannst beispielsweise eine statische Variable (in einer nicht-statischen Klasse erstellen), um eine Variable zu haben, die von allen Instanzen einer Klasse gemeinsam genutzt werden kann:

public class Planet
{
    public static int totalUniverseHumanCount = 0;

    public Planet(){
       totalUniverseHumanCount += 100000; // Statische variable erhöhen
    }  
}

class Universe
{
    static void Main()
    {
        Planet earth = new Planet();
        Planet mars = new Planet();

        Console.WriteLine(Planet.totalUniverseHumanCount ); // 200000
    }
}

Hier kannst du noch mehr über das C# static Keyword erfahren. Unsere Artikel über Interfaces oder Events könnten dich ebenfalls interessieren.