Pon*_*dum 51 .net c# vb.net oop
可能重复:
定义构造函数签名的接口?
我知道你不能在.Net中的接口中指定构造函数,但为什么我们不能呢?
对于我当前的项目来说,能够指定必须使用构造函数传入"引擎"非常有用,但是我不能满足于对类的XML注释.
cle*_*tus 89
因为接口描述了行为.构造函数不是行为.如何构建对象是一个实现细节.
不,由于已发布的原因,您不能在接口上拥有构造函数.但是你可以在抽象类上.可以说比如你有这个基类.
public abstract class ClassOne
{
protected int _x;
protected string _s;
public ClassOne(int x, string s)
{
_x = x;
_s = s;
}
}
Run Code Online (Sandbox Code Playgroud)
请注意,没有构造函数不带参数(默认构造函数),这意味着任何继承自ClassOne的类必须调用具有2个参数的构造函数.
所以这是无效的,不会编译.
public class ClassTwo : ClassOne
{
public ClassTwo()
{ }
}
Run Code Online (Sandbox Code Playgroud)
但是这是有效的并且将编译.
public class ClassTwo : ClassOne
{
public ClassTwo(int x, string s) : base(x, s)
{ }
}
Run Code Online (Sandbox Code Playgroud)
我想在此指出,在C#中,您只能从一个基类继承.这意味着这可能不是特定情况的正确解决方案,但需要考虑.
托尼.
其他答案已经指出为什么在接口上有构造函数声明没有意义.但是从你的问题来看,我猜你可能正在寻找抽象的工厂模式.
举一个基于你的问题的例子:你说你想以某种方式声明必须将'引擎'传递给构造函数.您可以通过为这样的构造服务声明一个单独的接口来完成此操作:
public interface IGadgetFactory
{
IGadget CreateGadget(Engine engine);
}
Run Code Online (Sandbox Code Playgroud)
任何必须创建IGadget
实例的代码都可以使用IGadgetFactory
实例而不是直接调用任何构造函数.