构造器初始化(二): base让派生类构造器调用基类中属于自己的构造器
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace InitialConstruct
{
class BaseClass
{
public BaseClass()
{
Console.WriteLine("[BaseClass.BaseClass] " + "Construct called");
}
public BaseClass(int foo)
{
Console.WriteLine("[BaseClass.BaseClass(int foo)]" + " foo={0}", foo);
}
}
class DerivedClass : BaseClass
{
public DerivedClass()
{
Console.WriteLine("[DerivedClass.Derived] " + "Construct called");
}
//如果不用base关键字指定,相当于指定了基类构造器中无参构造器
public DerivedClass(int foo)
{
Console.WriteLine("[DerivedClass.DerivedClass] " + "foo={0}", foo);
}
}
class Program
{
static void Main(string[] args)
{
Console.WriteLine("[Main] Instantianting a " + "DerivedClass object");
DerivedClass derived = new DerivedClass();
DerivedClass derivedParamer = new DerivedClass(42);
Console.ReadKey();
}
}
}

使用base关键字指定自己需要的基类构造器:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace InitialConstruct
{
class BaseClass
{
public BaseClass()
{
Console.WriteLine("[BaseClass.BaseClass] " + "Construct called");
}
public BaseClass(int foo)
{
Console.WriteLine("[BaseClass.BaseClass(int foo)]" + " foo={0}", foo);
}
}
class DerivedClass : BaseClass
{
public DerivedClass()
{
Console.WriteLine("[DerivedClass.Derived] " + "Construct called");
}
//如果不用base关键字指定,相当于指定了基类构造器中无参构造器
public DerivedClass(int foo):base(foo)
{
Console.WriteLine("[DerivedClass.DerivedClass] " + "foo={0}", foo);
}
}
class Program
{
static void Main(string[] args)
{
Console.WriteLine("[Main] Instantianting a " + "DerivedClass object");
DerivedClass derived = new DerivedClass();
DerivedClass derivedParamer = new DerivedClass(42);
Console.ReadKey();
}
}
}

总结:
BaseClass中有两个构造器:一个无参构造器,一个有int参数的构造器。而DerivedClass只有一个构造器,它有一个int参数。如果不用base关键字,DerivedClass将调用无参构造器,这不是我们希望的结果。如何确保能调用到所需的BaseClass构造器?,办法就是:在初始化器列表中显示第告诉编译器希望调用哪个构造器。
浙公网安备 33010602011771号