statisk (C#-referens)

Den här sidan beskriver nyckelordet static modifierare. Nyckelordet static är också en del av using static direktivet.

static Använd modifieraren för att deklarera en statisk medlem som tillhör själva typen i stället för ett specifikt objekt. Modifieraren static kan användas för att deklarera static klasser. I klasser, gränssnitt och strukturer kan du lägga till static modifieraren i fält, metoder, egenskaper, operatorer, händelser och konstruktorer. Modifieraren static kan inte användas med indexerare eller finalizers. Mer information finns i Statiska klasser och Statiska klassmedlemmar.

Du kan lägga till modifieraren i static en lokal funktion. En statisk lokal funktion kan inte samla in lokala variabler eller instanstillstånd.

Du kan lägga till modifieraren i static ett lambda-uttryck eller en anonym metod. En statisk lambda- eller anonym metod kan inte samla in lokala variabler eller instanstillstånd.

Exempel – statisk klass

Följande klass deklareras som static och innehåller endast static metoder:

static class CompanyEmployee
{
    public static void DoSomething() { /*...*/ }
    public static void DoSomethingElse() { /*...*/  }
}

En konstant- eller typdeklaration är implicit medlem static . Det static går inte att referera till en medlem via en instans. I stället refereras det via typnamnet. Tänk till exempel på följande klass:

public class MyBaseC
{
    public struct MyStruct
    {
        public static int x = 100;
    }
}

Om du vill referera till static medlemmen xanvänder du det fullständigt kvalificerade namnet, MyBaseC.MyStruct.x, såvida inte medlemmen är tillgänglig från samma omfång:

Console.WriteLine(MyBaseC.MyStruct.x);

En instans av en klass innehåller en separat kopia av alla instansfält i klassen, men det finns bara en kopia av varje static fält.

Det går inte att använda this för att referera static till metoder eller egenskapsåtkomster.

Om nyckelordet static tillämpas på en klass måste alla medlemmar i klassen vara static.

Klasser, gränssnitt och static klasser kan ha static konstruktorer. En static konstruktor anropas någon gång mellan när programmet startar och klassen instansieras.

Kommentar

Nyckelordet static har mer begränsade användningsområden än i C++. Om du vill jämföra med nyckelordet C++ läser du Lagringsklasser (C++).

För att demonstrera static medlemmar bör du överväga en klass som representerar en anställd på företaget. Anta att klassen innehåller en metod för att räkna anställda och ett fält för att lagra antalet anställda. Både metoden och fältet tillhör inte någon instans av en anställd. I stället tillhör de klassen av anställda som helhet. De bör deklareras som static medlemmar i klassen.

Exempel – statiskt fält och -metod

I det här exemplet läss namnet och ID:t för en ny medarbetare, räknaren ökar med en och visar informationen för den nya medarbetaren och det nya antalet anställda. Det här programmet läser det aktuella antalet anställda från tangentbordet.

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
*/

Exempel – statisk initiering

Det här exemplet visar att du kan initiera ett fält med hjälp av ett static annat static fält som ännu inte har deklarerats. Resultatet kommer att vara odefinierat tills du uttryckligen tilldelar ett värde till fältet static .

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
*/

Språkspecifikation för C#

Mer information finns i C#-språkspecifikationen. Språkspecifikationen är den slutgiltiga källan för C#-syntax och -användning.

Se även