可能重复:
在接口中定义构造函数签名?
我知道在.Net中不能在接口中指定构造函数,但为什么不能呢?
对于我的当前项目,能够指定必须使用构造函数传递'engine'将非常有用,但由于不能使用构造函数,我不得不满足于在类上使用XML注释。
可能重复:
在接口中定义构造函数签名?
我知道在.Net中不能在接口中指定构造函数,但为什么不能呢?
对于我的当前项目,能够指定必须使用构造函数传递'engine'将非常有用,但由于不能使用构造函数,我不得不满足于在类上使用XML注释。
接口描述行为。构造函数不是行为,对象如何构建是实现细节。
public abstract class ClassOne
{
protected int _x;
protected string _s;
public ClassOne(int x, string s)
{
_x = x;
_s = s;
}
}
注意没有不带参数的构造函数(默认构造函数),这意味着任何继承自ClassOne的类都必须调用具有2个参数的构造函数。
因此,以下代码是无效的并且不会编译。
public class ClassTwo : ClassOne
{
public ClassTwo()
{ }
}
public class ClassTwo : ClassOne
{
public ClassTwo(int x, string s) : base(x, s)
{ }
}
除了已经发布的其他原因外,还要记住一个类可以轻松实现多个接口; 那么应该使用哪个构造函数呢?
public interface IGadgetFactory
{
IGadget CreateGadget(Engine engine);
}
IGadget
实例的代码,都可以使用 IGadgetFactory
实例来代替直接调用构造函数。因为你不能实例化一个接口,所以构造函数没有意义。
Dim x as new IDoStuff()
哪个实现会被调用?
Dim X As IDoStuff = IDoStuff_Creator.CreateNew();
。 - supercat