下面這段程式碼求值
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class Class1
{
internal static int count = 0;
static Class1()
{
count++;
}
public Class1()
{
count++;
}
}
Class1 o1 = new Class1();
Class1 o2 = new Class1();
// o1.count 的值是 2
// o2.count 的值是 3
o1.count 的值是多少?
在這個範例中,count 是一個靜態欄位,它被所有類別實體共用。在靜態建構子 static Class1() 中,count 被增加了一次。此外,在每個物件的建構子 public Class1() 中,count 又被增加了一次。
因為你建立了兩個Class1 物件o1 和o2,所以靜態建構子static Class1() 會在類別的第一個實體被建立時調用,而普通建構子public Class1() 在每個物件建立時都會呼叫。
因此,在創建 o1 的時候,count 增加了兩次(一次來自靜態建構函數,一次來自普通建構函數)。而在建立 o2 的時候,靜態建構子不會再被調用,只有普通建構子會增加 count,所以
o1.count 的值是 2, o2.count 的值是3。