實例變量初始化函數
當一個構造函數沒有構造初始化函數或一個形式為base(...)的構造函數初始化函數,構造函數就就隱含的執行被類中聲明的實例域的變量初始化函數指定的初始化。這與賦值序列相關,這些賦值在直接基類構造函數的隱式調用前,在構造函數的入口被直接執行。變量初始化函數按照它們在類聲明中出現的文字順序執行。
構造函數執行
可以把一個實例變量初始化函數和一個構造函數初始化函數,看作是自動插在構造函數主體中的第一條語句前。例子
using System.Collections;
class A
{
int x = 1, y = -1, count;
public A() {
count = 0;
}
public A(int n) {
count = n;
}
}
class B: A
{
double sqrt2 = Math.Sqrt(2.0);
ArrayList items = new ArrayList(100);
int max;
public B(): this(100) {
items.Add("default");
}
public B(int n): base(n - 1) {
max = n;
}
}
包含了許多變量初始化函數,並且也包含了每個形式(base和this)的構造函數初始化函數。這個例子與下面介紹的例子相關,在那裡,每條注釋指明了一個自動插入的語句(自動插入構造函數調用所使用的語法不是有效的,至少用來演示這個機制)。
using System.Collections;
class A
{
int x, y, count;
public A() {
x = 1; // Variable initializer
y = -1; // Variable initializer
object(); // Invoke object() constructor
count = 0;
}
public A(int n) {
x = 1; // Variable initializer
y = -1; // Variable initializer
object(); // Invoke object() constructor
count = n;
}
}
class B: A
{
double sqrt2;
ArrayList items;
int max;
public B(): this(100) {
B(100); // Invoke B(int) constructor
items.Add("default");
}
public B(int n): base(n - 1) {
sqrt2 = Math.Sqrt(2.0); // Variable initializer
items = new ArrayList(100); // Variable initializer
A(n - 1); // Invoke A(int) constructor
max = n;
}
}