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 staticlambda 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.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. 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#.