在C#的類中,我們有時會創建多個構造函數,以適應不同的參數情況。有時參數少的構造函數只需要以常量作爲默認參數調用另一個構造函數就可以了,可是對於構造函數來說,相互之間如何調用呢?
Class Test
{
// 帶參數的構造函數
public Test(int i)
{
Console.WriteLine(i);
}
Class Test
{
// 帶參數的構造函數
public Test(int i)
{
Console.WriteLine(i);
}
// 沒有參數的構造函數
public Test()
{
// 這裏我們如何調用Test(int i)?
}
}
public Test()
{
// 這裏我們如何調用Test(int i)?
}
}
顯然,構造 函數的訪問修飾符是public,我們不能像調用私有方法那樣直接調用;而它也不是static靜態方法,所以也不能通過類名.方法名的方式來調用;如果 作爲一個普通公有的方法調用的話,需要創建類的實例,而創建類的實例需要執行構造函數,而其本身就是個構造函數,這就陷入了一個循環。
事實上,我從網上搜到的資料,C#中類的構造函數之間的調用是這樣實現的:
Class Test
{
// 帶參數的構造函數
public Test(int i)
{
Console.WriteLine(i);
}
{
// 帶參數的構造函數
public Test(int i)
{
Console.WriteLine(i);
}
// 沒有參數的構造函數
public Test() : Test(0)
{
// 看到了嗎,這裏是不能調用的,調用要放到上面寫
}
}
public Test() : Test(0)
{
// 看到了嗎,這裏是不能調用的,調用要放到上面寫
}
}
這像什麼呢?這像是類的繼承。大概構造函數之間的調用,就是一種繼承關係吧,而不是我們所說的調用。調用這個詞,只是描述起來比較方便而已。
這種實現方式的實質是什麼?爲什麼這麼設計?我還是想進一步探索,歡迎大家共同探討。