statisch (C#-verwijzing)
Op deze pagina wordt het static
wijzigingswoord beschreven. Het static
trefwoord maakt ook deel uit van de using static
richtlijn.
Gebruik de static
wijzigingsfunctie om een statisch lid te declareren, dat deel uitmaakt van het type zelf in plaats van een specifiek object. De static
wijzigingsfunctie kan worden gebruikt om klassen te declareren static
. In klassen, interfaces en structs kunt u de static
modifier toevoegen aan velden, methoden, eigenschappen, operators, gebeurtenissen en constructors. De static
wijzigingsfunctie kan niet worden gebruikt met indexeerfuncties of finalizers. Zie Statische klassen en statische klasseleden voor meer informatie.
U kunt de static
wijzigingsfunctie toevoegen aan een lokale functie. Een statische lokale functie kan geen lokale variabelen of instantiestatus vastleggen.
U kunt de static
wijzigingsfunctie toevoegen aan een lambda-expressie of anonieme methode. Een statische lambda- of anonieme methode kan geen lokale variabelen of instantiestatus vastleggen.
Voorbeeld- statische klasse
De volgende klasse wordt gedeclareerd als static
en bevat alleen static
methoden:
static class CompanyEmployee
{
public static void DoSomething() { /*...*/ }
public static void DoSomethingElse() { /*...*/ }
}
Een constante of typedeclaratie is impliciet een static
lid. Er static
kan niet naar een lid worden verwezen via een exemplaar. In plaats daarvan wordt ernaar verwezen via de typenaam. Denk bijvoorbeeld aan de volgende klasse:
public class MyBaseC
{
public struct MyStruct
{
public static int x = 100;
}
}
Als u naar het static
lid x
wilt verwijzen, gebruikt u de volledig gekwalificeerde naam, MyBaseC.MyStruct.x
tenzij het lid toegankelijk is vanuit hetzelfde bereik:
Console.WriteLine(MyBaseC.MyStruct.x);
Hoewel een exemplaar van een klasse een afzonderlijke kopie bevat van alle exemplaarvelden van de klasse, is er slechts één exemplaar van elk static
veld.
Het is niet mogelijk om te gebruiken om te verwijzen this
naar static
methoden of eigenschapstoegangsors.
Als het static
trefwoord wordt toegepast op een klasse, moeten alle leden van de klasse zijn static
.
Klassen, interfaces en static
klassen kunnen constructors hebben static
. Een static
constructor wordt op een bepaald moment aangeroepen tussen het moment waarop het programma wordt gestart en de klasse wordt geïnstantieerd.
Notitie
Het static
trefwoord heeft beperktere toepassingen dan in C++. Zie Storage-klassen (C++) om het trefwoord C++ te vergelijken.
Als u leden wilt demonstreren static
, moet u een klasse overwegen die een werknemer van het bedrijf vertegenwoordigt. Stel dat de klasse een methode bevat voor het tellen van werknemers en een veld voor het opslaan van het aantal werknemers. Zowel de methode als het veld behoren niet tot één werknemerexemplaren. In plaats daarvan behoren ze tot de klasse werknemers als geheel. Ze moeten worden gedeclareerd als static
leden van de klas.
Voorbeeld: statisch veld en methode
In dit voorbeeld worden de naam en id van een nieuwe werknemer gelezen, wordt de teller van de werknemer met één verhoogd en worden de gegevens voor de nieuwe werknemer en het nieuwe aantal werknemers weergegeven. Dit programma leest het huidige aantal werknemers van het toetsenbord.
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
*/
Voorbeeld: statische initialisatie
In dit voorbeeld ziet u dat u een static
veld kunt initialiseren met behulp van een ander static
veld dat nog niet is gedeclareerd. De resultaten worden niet gedefinieerd totdat u expliciet een waarde aan het static
veld toewijst.
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#-taalspecificatie
Zie de C#-taalspecificatie voor meer informatie. De taalspecificatie is de definitieve bron voor de C#-syntaxis en het gebruik.