Poznámka
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
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 statičtí členové tříd.
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.
class Calc1
{
public void CalculateSum()
{
int a = 3;
int b = 7;
// Static local function - cannot access 'a' or 'b' directly
static int Add(int x, int y)
{
return x + y;
}
int result = Add(a, b);
Console.WriteLine($"Sum: {result}");
}
}
/*
Output:
Sum: 10
*/
Modifikátor můžete přidat k static
lambda výrazu nebo anonymní metodě. Statická lambda nebo anonymní metoda nemůže zachytit místní proměnné ani stav instance.
class Calc2
{
static void Main()
{
Func<int, int, int> add = static (a, b) => a + b;
int result = add(5, 10);
Console.WriteLine($"Sum: {result}");
}
}
/*
Output:
Sum: 15
*/
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 je odkazován pomocí 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. U obecných typů má každý uzavřený obecný typ vlastní kopii statických polí. Statická pole označená ThreadStaticAttribute mají jednu kopii na vlákno.
Není možné použít this
k odkazování static
na metody nebo přístupové objekty vlastností.
Pokud je klíčové slovo static
použito na třídu, všechny členy třídy musí být static
.
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é konkrétní 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 ve specifikaci jazyka C# . Specifikace jazyka je konečným zdrojem syntaxe a použití jazyka C#.