statikus (C# referencia)
Ez a lap a static
módosító kulcsszót ismerteti. A static
kulcsszó is része az using static
irányelvnek.
static
A módosító használatával deklarálhat egy statikus tagot, amely nem egy adott objektumhoz, hanem magához a típushoz tartozik. A static
módosítóval osztályokat deklarálhat static
. Osztályokban, felületekben és szerkezetekben hozzáadhatja a módosítót a static
mezőkhöz, metódusokhoz, tulajdonságokhoz, operátorokhoz, eseményekhez és konstruktorokhoz. A static
módosító nem használható indexelőkkel vagy véglegesítőkkel. További információ: Statikus osztályok és statikus osztálytagok.
Hozzáadhatja a static
módosítót egy helyi függvényhez. A statikus helyi függvények nem tudnak helyi változókat vagy példányállapotokat rögzíteni.
A módosító hozzáadható static
egy lambda kifejezéshez vagy egy névtelen metódushoz. A statikus lambda vagy névtelen metódus nem tudja rögzíteni a helyi változókat vagy a példány állapotát.
Példa – statikus osztály
A következő osztály deklarálva van, static
és csak static
metódusokat tartalmaz:
static class CompanyEmployee
{
public static void DoSomething() { /*...*/ }
public static void DoSomethingElse() { /*...*/ }
}
Az állandó vagy típusdeklaráció implicit módon tag static
. Egy static
tagra nem lehet hivatkozni egy példányon keresztül. Ehelyett a típusnéven keresztül hivatkozik rá. Vegyük például a következő osztályt:
public class MyBaseC
{
public struct MyStruct
{
public static int x = 100;
}
}
A tagra x
való hivatkozáshoz static
használja a teljes nevet, kivéve, MyBaseC.MyStruct.x
ha a tag ugyanabból a hatókörből érhető el:
Console.WriteLine(MyBaseC.MyStruct.x);
Bár az osztály egy példánya az osztály összes példánymezőjének külön másolatát tartalmazza, az egyes static
mezőkből csak egy példány van.
Metódusokra vagy tulajdonságkiegészítőkre nem lehet hivatkozni this
static
.
Ha a static
kulcsszó egy osztályra van alkalmazva, az osztály minden tagjának meg kell lennie static
.
Az osztályok, interfészek és static
osztályok konstruktorokkal is rendelkezhetnek static
. A static
program indítása és az osztály példányosítása között egy konstruktort hívunk meg.
Feljegyzés
A static
kulcsszónak korlátozottabb felhasználási módja van, mint a C++-ban. A C++ kulcsszóval való összehasonlításhoz tekintse meg a Tárolási osztályok (C++) című témakört.
A tagok bemutatásához static
fontolja meg a vállalati alkalmazottat képviselő osztályt. Tegyük fel, hogy az osztály tartalmaz egy metódust az alkalmazottak megszámlálására, valamint egy mezőt az alkalmazottak számának tárolására. A metódus és a mező nem tartozik egyetlen alkalmazotti példányhoz sem. Ehelyett az alkalmazottak egész osztályához tartoznak. Ezeket az osztály tagjaiként static
kell deklarálni.
Példa – statikus mező és metódus
Ez a példa beolvassa egy új alkalmazott nevét és azonosítóját, egyenként növeli az alkalmazott számlálóját, és megjeleníti az új alkalmazott adatait és az új alkalmazottak számát. Ez a program beolvassa az alkalmazottak aktuális számát a billentyűzetről.
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élda – statikus inicializálás
Ez a példa azt mutatja, hogy egy mezőt inicializálhat egy static
másik static
, még nem deklarált mező használatával. Az eredmények mindaddig nem lesznek meghatározva, amíg explicit módon nem rendel hozzá értéket a static
mezőhöz.
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
*/
C# nyelvspecifikáció
További információkért lásd a C# nyelvi specifikációját. A nyelvi specifikáció a C#-szintaxis és -használat végleges forrása.