static (C# 參考)
static 修飾詞 (Modifier) 可用來宣告靜態成員,此成員屬於型別本身,並不隸屬任何一個物件。 static 修飾詞可以用於類別、欄位、方法、屬性、運算子、事件及建構函式 (Constructor),但是不能用於索引子 (Indexer)、解構函式 (Destructor) 或類別以外的型別。 如需詳細資訊,請參閱 靜態類別和靜態類別成員 (C# 程式設計手冊)。
範例
下列類別是宣告為 static,而且只包含 static 方法:
static class CompanyEmployee
{
public static void DoSomething() { /*...*/ }
public static void DoSomethingElse() { /*...*/ }
}
常數或型別宣告隱含靜態成員。
靜態成員無法經由執行個體來參考。 相反地,它需要經由型別名稱來參考。 例如,請參考下列類別:
public class MyBaseC
{
public struct MyStruct
{
public static int x = 100;
}
}
若要參考靜態成員 x,請使用完整的名稱 MyBaseC.MyStruct.x,除非它是從相同範圍來存取:
Console.WriteLine(MyBaseC.MyStruct.x);
雖然一個類別的執行個體包含類別所有執行個體欄位的分別複本,但是每一個靜態欄位只有一個複本。
不可以使用這個參考靜態方法或屬性存取子。
如果類別套用了 static 關鍵字,則此類別的所有成員必定為靜態。
類別和靜態類別都可能具有靜態建構函式。 靜態建構函式會在程式啟動與類別具現化 (Instantiated) 之間的某個時間點進行呼叫。
注意事項 |
---|
static 關鍵字的用法比在 C++ 中具有更多限制。若要與 C++ 關鍵字進行比較,請參閱 靜態 (C++)。 |
為了示範靜態成員,以代表公司員工的類別為例。 假設此類別包含一方法來計算員工人數和一個欄位來儲存員工人數。 此方法和欄位不屬於任何執行個體員工。 相反的,他們屬於公司類別。 因此,他們應該宣告成類別的靜態成員。
這個範例讀取新員工的名字和 ID、然後累加員工人數,並且顯示此新員工的資訊以及員工新人數。 為了簡化,這個程式從鍵盤讀取目前的員工人數。 在實際應用上,這項資訊應從檔案讀取。
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: {0}", e.name);
Console.WriteLine("ID: {0}", e.id);
Console.WriteLine("New Number of Employees: {0}",
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
*/
這個範例會示範,雖然您可以使用其他尚未宣告的靜態欄位來初始化靜態欄位,但是在明確指派值給該靜態欄位之前,結果都會是未定義的。
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# 語言規格
如需詳細資訊,請參閱 C# 語言規格。語言規格是 C# 語法和用法的限定來源。