Share via


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 xvaló hivatkozáshoz static használja a teljes nevet, kivéve, MyBaseC.MyStruct.xha 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 thisstatic .

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.

Lásd még