第五講 構造器與析構器
構造器
構造器負責類中成員變數(域)的初始化。C#的類有兩種構造器:執行個體構造器和靜態構造器。執行個體構造器負責初始化類中的執行個體變數,它只有在使用者用new關鍵字為對象分配記憶體時才被調用。而且作為參考型別的類,其執行個體化後的對象必然是分配在託管堆(Managed Heap)上。這裡的託管的意思是指該記憶體受.NET的CLR運行時管理。和C++不同的是,C#中的對象不可以分配在棧中,使用者只聲明對象是不會產生構造器調用的。
執行個體構造器分為預設構造器和非預設構造器。預設構造器是在一個類沒有聲明任何構造器的情況下,編譯器強製為該類添加的一個無參數的構造器,該構造器僅僅調用父類的無參數構造器。預設構造器實際上是C#編譯器為保證每一個類都有至少一個構造器而採取的附加規則。注意這裡的三個要點:
子類沒有聲明任何構造器;
編譯器為子類加的預設構造器一定為無參數的構造器;
父類一定要存在一個無參數的構造器。
看下面例子的輸出:
using System;
public class MyClass1
{
public MyClass1()
{
Console.WriteLine(“MyClass1
Parameterless Contructor!”);
}
public MyClass1(string param1)
{
Console.WriteLine(“MyClass1
Constructor Parameters : ”+param1);
}
}
public class MyClass2:MyClass1
{
}
public class Test
{
public static void Main()
{
MyClass2 myobject1=new MyClass2();
}
}
編譯器並運行可以得到下面的輸出:
MyClass1 Parameterless Contructor!
讀者可以去掉MyClass1的無參構造器public MyClass1()看看編譯結果。