1。如果不爲類編寫構造函數,編譯器就會創建一個默認的構造函數,運行時會在創建新對象時調用它。
<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
2。構造函數互相之間的可鏈接關係
using System;
namespace Webtest
{
/// <summary>
/// manager 的摘要說明。
/// </summary>
public class manager
{
public manager():this("test",0)
{}
public manager(string name):this(name,0)
{}
public manager(string name,int grade)
{
this.Grade = grade;
this.Name = name;
}
private string mName;
public string Name
{
get
{
return this.mName;
}
set
{
this.mName = value;
}
}
private int mGrade;
public int Grade
{
get
{
return this.mGrade;
}
set
{
this.mGrade = value;
}
}
}
3.調用基類的構造函數
每個派生類都隱式或者顯示的調用基類的構造函數,實際上,如果沒有顯示的調用基類的構造函數,則CLR就會調用無參數的構造函數。
基類的構造函數只能從派生類的構造函數中調用。調用完才執行派生類的構造函數代碼塊中的實現。
4.私有構造函數
私有構造函數一般包含在許多靜態方法的類中,這些靜態方法用作一個庫,而不是對象。添加構造函數將確保類不能在外部被創建。這也是在很多設計模式中都有用到的
使用私有構造函數的2個意義是:
1) 私有構造函數不能在外部被創建。
2) 如果不提供參數,所創建的對象是無意義的。
a) 無論指定與否,派生類中是要調用基類的構造函數,這表示,帶有私有構造函數的類不能用做基類,因爲他們的構造函數對派生類來說是不可見的。
b) 當另一個類嵌套在帶有私有構造函數的類中時,包含私有構造函數的類就可以由其他對象創建。無論對象是不是私有,嵌套的構造函數總是可以創建其容器類的實例。
using System;
namespace Webtest
{
/// <summary>
/// Teacher 的摘要說明。
/// </summary>
public class Teacher
{
private Teacher()
{
//
// TODO: 在此處添加構造函數邏輯
//
}
public Teacher(string name)
{
this.Name = name;
}
private string mName;
public string Name
{
get
{
return this.mName;
}
set
{
this.mName = value;
}
}
private int mGrade;
public int Grade
{
get
{
return this.mGrade;
}
set
{
this.mGrade = value;
}
}
}
}
5.靜態構造函數
靜態的構造函數是不能重載的,所以可用的靜態構造函數只有一個默認的無參數構造函數。靜態構造函數也不能顯示調用,不能在派生類中繼承,但是在創建基類類型時可以調用。
幾個原則:
1) 靜態構造函數在創建類的實例之前調用
2) 靜態構造函數在創建類的第一個實例之前調用
3) 靜態構造函數在引用靜態字段之前調用。