Sdílet prostřednictvím


static – modifikátor (Referenční dokumentace jazyka C#)

Tato stránka popisuje static modifikační klíčové slovo. Klíčové static slovo je také součástí direktivy using static .

Pomocí modifikátoru static deklarujte statický člen, který patří samotnému typu, nikoli ke konkrétnímu objektu. static Modifikátor lze použít k deklaraci static tříd. V třídách, rozhraních a strukturách můžete modifikátor přidat static do polí, metod, vlastností, operátorů, událostí a konstruktorů. static Modifikátor nelze použít s indexery ani finalizátory. Další informace naleznete v tématu Statické třídy a členy statické třídy.

Modifikátor můžete přidat static do místní funkce. Statická místní funkce nemůže zachytit místní proměnné ani stav instance.

Modifikátor můžete přidat do výrazu static lambda nebo anonymní metody. Statická lambda nebo anonymní metoda nemůže zachytit místní proměnné ani stav instance.

Příklad – statická třída

Následující třída je deklarována jako static a obsahuje pouze static metody:

static class CompanyEmployee
{
    public static void DoSomething() { /*...*/ }
    public static void DoSomethingElse() { /*...*/  }
}

Deklarace konstanty nebo typu je implicitně static členem. Na static člena nejde odkazovat prostřednictvím instance. Místo toho se odkazuje prostřednictvím názvu typu. Představte si například následující třídu:

public class MyBaseC
{
    public struct MyStruct
    {
        public static int x = 100;
    }
}

Pokud chcete odkazovat na static člena x, použijte plně kvalifikovaný název, MyBaseC.MyStruct.xpokud není člen přístupný ze stejného oboru:

Console.WriteLine(MyBaseC.MyStruct.x);

Zatímco instance třídy obsahuje samostatnou kopii všech polí instance třídy, existuje pouze jedna kopie každého static pole.

Není možné použít this k odkazování static na metody nebo přístupové objekty vlastností.

static Pokud je klíčové slovo použito na třídu, musí být staticvšechny členy třídy .

Třídy, rozhraní a static třídy mohou mít static konstruktory. static Konstruktor se v určitém okamžiku volá mezi spuštěním programu a vytvořením instance třídy.

Poznámka:

Klíčové static slovo má více omezených použití než v jazyce C++. Porovnání s klíčovým slovem C++ najdete v tématu Třídy úložiště (C++).

Pokud chcete předvést static členy, zvažte třídu, která představuje zaměstnance společnosti. Předpokládejme, že třída obsahuje metodu pro počítání zaměstnanců a pole pro uložení počtu zaměstnanců. Metoda i pole nepatří do žádné instance zaměstnance. Místo toho patří do třídy zaměstnanců jako celku. Měly by být deklarovány jako static členy třídy.

Příklad – statické pole a metoda

Tento příklad přečte jméno a ID nového zaměstnance, zvýší čítač zaměstnance o jeden a zobrazí informace pro nového zaměstnance a nový počet zaměstnanců. Tento program přečte aktuální počet zaměstnanců z klávesnice.

public class Employee4
{
    public string id;
    public string name;

    public Employee4()
    {
    }

    public Employee4(string name, string id)
    {
        this.name = name;
        this.id = id;
    }

    public static int employeeCounter;

    public static int AddEmployee()
    {
        return ++employeeCounter;
    }
}

class MainClass : Employee4
{
    static void Main()
    {
        Console.Write("Enter the employee's name: ");
        string name = Console.ReadLine();
        Console.Write("Enter the employee's ID: ");
        string id = Console.ReadLine();

        // Create and configure the employee object.
        Employee4 e = new Employee4(name, id);
        Console.Write("Enter the current number of employees: ");
        string n = Console.ReadLine();
        Employee4.employeeCounter = Int32.Parse(n);
        Employee4.AddEmployee();

        // Display the new information.
        Console.WriteLine($"Name: {e.name}");
        Console.WriteLine($"ID:   {e.id}");
        Console.WriteLine($"New Number of Employees: {Employee4.employeeCounter}");
    }
}
/*
Input:
Matthias Berndt
AF643G
15
 *
Sample Output:
Enter the employee's name: Matthias Berndt
Enter the employee's ID: AF643G
Enter the current number of employees: 15
Name: Matthias Berndt
ID:   AF643G
New Number of Employees: 16
*/

Příklad – statická inicializace

Tento příklad ukazuje, že pole můžete inicializovat static pomocí jiného static pole, které ještě není deklarováno. Výsledky nebudou definovány, dokud explicitně nepřiřadíte hodnotu k static poli.

class Test
{
    static int x = y;
    static int y = 5;

    static void Main()
    {
        Console.WriteLine(Test.x);
        Console.WriteLine(Test.y);

        Test.x = 99;
        Console.WriteLine(Test.x);
    }
}
/*
Output:
    0
    5
    99
*/

specifikace jazyka C#

Další informace najdete v tématu Specifikace jazyka C#. Specifikace jazyka je úplným a rozhodujícím zdrojem pro syntaxi a použití jazyka C#.

Viz také