聲明了一個類Point它提供了兩個構造函數它們是重載的一個是沒有參數的Point構造函數和一個是有兩個double參數的Point構造函數如果類中沒有提供這些構造函數那麼會CLR會自動提供一個缺省構造函數的但一旦類中提供了自定義的構造函數如Point()和Point(double x double y)則缺省構造函數將不會被提供這一點要注意
) 靜態構造函數
靜態構造函數是實現對一個類進行初始化的方法成員它一般用於對靜態數據的初始化靜態構造函數不能有參數不能有修飾符而且不能被調用當類被加載時類的靜態構造函數自動被調用如
using SystemData;
class Employee
{
private static DataSet ds;
static Employee()
{
ds = new DataSet();
}
}
聲明了一個有靜態構造函數的類Employee注意靜態構造函數只能對靜態數據成員進行初始化而不能對非靜態數據成員進行初始化但是非靜態構造函數既可以對靜態數據成員賦值也可以對非靜態數據成員進行初始化
如果類僅包含靜態成員你可以創建一個private的構造函數private TestClass() {…}但是private意味著從類的外面不可能訪問該構造函數所以它不能被調用且沒有對象可以被該類定義實例化
以上是幾種類型構造函數的簡單運用下面將重點介紹一下在類的層次結構中(即繼承結構中)基類和派生類的構造函數的使用方式派生類對象的初始化由基類和派生類共同完成基類的成員由基類的構造函數初始化派生類的成員由派生類的構造函數初始化
當創建派生類的對象時系統將會調用基類的構造函數和派生類的構造函數構 造函數的執行次序是先執行基類的構造函數再執行派生類的構造函數如果派生類又有對象成員則先執行基類的構造函數再執行成員對象類的構造函數最後執行派生類的構造函數
至於執行基類的什麼構造函數缺省情況下是執行基類的無參構造函數如果要執行基類的有參構造函數則必須在派生類構造函數的成員初始化表中指出如
class A
{
private int x;
public A( ) { x = ; }
public A( int i ) { x = i; }
};
class B : A
{
private int y;
public B( ) { y = ; }
public B( int i ) { y = i; }
public B( int i int j ):A(i) { y = j; }
};
From:http://tw.wingwit.com/Article/program/net/201311/14879.html