是否可以对需要实现构造函数(带参数)的派生类强制执行编译时合同?
我有一个基类与构造函数需要一个参数:
public class FooBase
{
protected int value;
public FooBase(int value) { this.value = value; }
public virtual void DoSomething() { throw new NotImplementedException(); }
}
Run Code Online (Sandbox Code Playgroud)
我想强制我的基类的派生实现相同的构造函数:
public class Foo : FooBase
{
public Foo(int value) : base(value) { }
public override void DoSomething() { Console.WriteLine("Foo: {0}", value); }
}
Run Code Online (Sandbox Code Playgroud)
如果没有实现构造函数,派生类会导致编译器错误,因为基类中没有默认构造函数:
// ERROR: 'Does not contain a constructor that takes 0 arguments'
// Adding default constructor in FooBase eliminates this compiler error, but
// provides a means to instantiate …Run Code Online (Sandbox Code Playgroud)