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.x
pokud 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 static
vš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#.