類的構造函數
1.默認的構造函數 (無參)
2.用戶自定義構造函數 (可有可無參數)
構造函數的繼承機制
從兩個方面來闡述這個問題:
一,基類中沒有定義構造函數(默認的構造函數)
當子類繼承基類的時候,會默認調用基類的構造函數
從最親近的一級往頂級查找
demo -01
class baseClass
{ }
class drivedClass :baseClass
{
public drivedClass()
{
Console.WriteLine("drivedClass 默認構造函數");
}
public drivedClass(int i)
{
Console.WriteLine("drivedClass 帶一個參數的構造函數");
}
}
drivedClass dc = new drivedClass();
Console.ReadLine();
結果:
drivedClass 默認構造函數
二,基類中有自定義的構造函數
這個情況比較複雜,我一一舉例來說明
當基類中只聲明無參數的構造函數
(無參構造函數只能有一個,多了會報錯)
子類中將只調用基類中無參構造函數
demo -02
class baseClass
{
public baseClass()
{
Console.WriteLine("baseClass 默認構造函數");
}
}
class drivedClass :baseClass
{
//base 的意思是調用基類的構造函數,當基類無參數時,base可有可無
public drivedClass():base()
{
Console.WriteLine("drivedClass 默認構造函數");
}
public drivedClass(int i)
{
Console.WriteLine("drivedClass 帶一個參數的構造函數");
}
public drivedClass(int i, int j)
{
Console.WriteLine("drivedClass 帶二個參數的構造函數");
}
}
drivedClass dc = new drivedClass();
Console.ReadLine();
結果
baseClass 默認構造函數
drivedClass 默認構造函數
當基類中既有無參構造函數,又有參數的構造函數時
就要看子類是怎麼調用構造函數的
demo -03
帶參數的構造函數
class baseClass
{
public baseClass()
{
Console.WriteLine("baseClass 默認構造函數");
}
public baseClass(int i)
{
Console.WriteLine("baseClass 帶一個參數的構造函數");
}
}
class drivedClass :baseClass
{
public drivedClass()
{
Console.WriteLine("drivedClass 默認構造函數");
}
public drivedClass(int i) :base(i)
{
Console.WriteLine("drivedClass 帶一個參數的構造函數");
}
public drivedClass(int i, int j)
{
Console.WriteLine("drivedClass 帶二個參數的構造函數");
}
}
drivedClass dc = new drivedClass(1);
Console.ReadLine();
結果
baseClass 帶一個參數的構造函數
drivedClass 帶一個參數的構造函數
構造函數技巧
我的體會是在有參構造函數的類中,最好把無參的構造函數
也手工寫上.