建構函式(Constructor) 初始化新物件成員
Constructor就是「建構函式」為類別的方法,當對類別進行實體化成為物件時,便會自動執行建構函式的方法,其特點:
- 「建構函式名稱」與「類別名稱」相同。
- 當對類別透過
new進行實體化成為物件時,會自動執行建構函式內的敘述(程式碼)。 - 「建構函式」主要作用在於:對物件進行初始化設定。
- 「建構函式」可以建立多個來達成多載(
Overloading)。 - 若「建構函式」透過
static關鍵字而成「靜態建構函式」時,便不能使用存取修飾詞,也無法使用參數來傳遞。 - 「靜態建構函式」是不能夠被直接叫用(
Invoke)。
靜態建構函式可用來初始化任何 靜態 數據,或執行只需要執行一次的特定動作。 在建立第一個執行個體或參考任何靜態成員之前,會自動進行呼叫。 靜態建構函式最多會呼叫一次。(靜態建構函式只會執行一次)
範例
使用構造函式,只要一行,在初始化物件時去賦值
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
//在初始化Student物件時去賦值
Student student = new Student("小明", 18, '男', 89, 60);
public class Student
{
//構造函式
public Student(string name, int age, char gender, int english, int math)
{
this.Name = name;
this.Age = age;
this.Gender = gender;
this.English = english;
this.Math = math;
}
public string Name { get; set; }
public int Age { get; set; }
public char Gender { get; set; }
public int English { get; set; }
public int Math { get; set; }
}
new 關鍵字
1
Person person = new Person();
new 幫助我們做了三件事:
- 在內存中開闢一塊空間
- 在開闢的空間中創建物件
- 調用物件的「構造函數」進行初始化物件
解構函式(Destructor) 釋放物件所佔用的資源
Destructor就是「解構函式」為類別的方法,主要用來釋放該物件所配置的資源,當物件被 Dispose或Close時,便會自動執行「解構函式」,其特點:
- 「解構函式名稱」與「類別名稱」相同,但須於「解構函式」前面加一個「
~」符號。 - 「解構函式」只能於類別中定義,而且一個類別只能有一個「解構函式」。
- 「解構函式」主要作用在於:對物件進行資源釋放動作。
- 「解構函式」會隱含呼叫物件的基底類別
Finalize()方法。 - 「解構函式」不使用存取修飾詞或參數。
- 「解構函式」會自動被叫用,並不能直接被呼叫。
- 「解構函式」不能被多載。
範例
1
2
3
4
5
6
//解構函式
//作用:幫助我們釋放資源
~Student()
{
// Cleanup statements...
}
範例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
class Student
{
//建構函式
public Student() {
IQ = 100;
EnrollScore = 0;
}
public Student(int iq, int enrollScore ) {
this.IQ = iq;
this.EnrollScore = enrollScore;
}
public int IQ { get; set; } //智商
public int EnrollScore { get; set; } //入學成績
public string? ClassResult { get; set; } //分配班級結果
public override string ToString()
{
if (IQ > 150 && EnrollScore > 500)
{
ClassResult = "資優班";
} else {
ClassResult = "普通班";
}
return ClassResult;
}
//解構函式
~Student()
{
Console.WriteLine("呼叫解構函式,Student物件資源釋放中");
}
}
MSDN - 靜態建構函式 (C# 程式設計手冊)
MSDN - 完成項 (舊稱為解構函式)
[C# 筆記] Constructor 構造函式 by R
[C# 筆記] destructor 解構函式 by R
Book: Visual C# 2005 建構資訊系統實戰經典教本