- 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.");
}
}
输出结果