在C#中,我有一个类, foo
,从类继承bar
,这反过来从类继承foobar
。
在foo
构造,我想打电话给foobar
直接构造函数,而不是到一个呼叫bar
构造。 我想是这样的:
public foo(int i): base : base(i)
显然,这是行不通的。 你将如何使其发挥作用,而不需要经过bar
构造?
在C#中,我有一个类, foo
,从类继承bar
,这反过来从类继承foobar
。
在foo
构造,我想打电话给foobar
直接构造函数,而不是到一个呼叫bar
构造。 我想是这样的:
public foo(int i): base : base(i)
显然,这是行不通的。 你将如何使其发挥作用,而不需要经过bar
构造?
你不能,你不能跳过栏的初始化。 你必须创建在酒吧一个构造函数,通过传递你的论点。 其原因是,它的酒吧有责任决定应当如何来构建其基类。 (基础类的结构是酒吧的实现的一部分,以及面向对象的原则之一是包封-隐藏实现到外部)
就拿要执行出的任何共享逻辑foobar
构造。
创建一个方法foobar
名为initialize,签名是void initialize(int i)
从调用构造函数中这种方法foo
。
当然,这不会跳过构造bar
。
我想你想从一个语言功能,这不是设计用来工作方式的一些具体行为。 种类似,例如,使用异常来控制正常应用程序流。
也许你可以给我们更多的详细信息,然后得到一个建议,是更适合你想要做什么。
+1同意这条有责任决定应当如何来构建。 我出来的代码像下面这样你可以使用默认的构造函数(条),并允许重写构造
public class bar
{
// Original constructor
int value { get; set; }
public bar(int i)
{
this.value = i;
}
}
public abstract class foobar : bar
{
int value {get; set;}
protected foobar(int i) : base(i)
{
value = i;
}
}
public class foo : foobar
{
// New constructor
protected foo(int i)
: base(i)
{
}
}