- base表示先調用基類的構造函數,如果此構造函數體爲空,則實際只執行基類構造函數。
- this表示先調用這個類的其它構造函數,如果此構造函數體爲空,則實際只執行其它構造函數。
- 帶有private的構造函數不能在類外執行。
class MyClass1
{
public readonly string Name;
private int intVal;
public int IntVal { get => intVal; set => intVal = value; }
public override string ToString() => "Name:" + Name + "\nVal: " + IntVal;
private MyClass1() : this("Default Name") { }//這一句如何解讀?
public MyClass1(string newName)
{
Name = newName;
intVal = 0;
}
private int myDoubleInt;
public int myDoubleIntProp => (myDoubleInt * 2);
}
class MyClass2
{
public readonly string Name;
private int intVal;
public int IntVal { get => intVal; set => intVal = value; }
public override string ToString() => "Name:" + Name + "\nVal: " + IntVal;
public MyClass2() : this("Default Name") { }//無參數類調用具體的帶參數類構造函數
public MyClass2(string newName)
{
Name = newName;
intVal = 0;
}
private int myDoubleInt;
public int myDoubleIntProp => (myDoubleInt * 2);
}
class subMyClass:MyClass2
{
public subMyClass():base()
{
Console.WriteLine("subMyClass():base()");
}
public subMyClass(string str):base(str)
{
Console.WriteLine("subMyClass(string str):base(str)");
}
}
class Program
{
static void Main(string[] args)
{
MyClass1 mc1 = new MyClass1("不能使用無參數構造函數");//因爲默認構造函數被定義爲private,無法在類外使用
MyClass2 mc2 = new MyClass2();
Console.WriteLine($"{mc2.IntVal},{mc2.Name}");
subMyClass subcls1 = new subMyClass();
subMyClass subcls2 = new subMyClass("good.");
}
}
輸出結果