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 x
anvä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.