调用第二级基类构造函数(Calling a second level base class cons

2019-09-21 23:42发布

在C#中,我有一个类, foo ,从类继承bar ,这反过来从类继承foobar

foo构造,我想打电话给foobar直接构造函数,而不是到一个呼叫bar构造。 我想是这样的:

 public foo(int i): base : base(i)

显然,这是行不通的。 你将如何使其发挥作用,而不需要经过bar构造?

Answer 1:

你不能,你不能跳过栏的初始化。 你必须创建在酒吧一个构造函数,通过传递你的论点。 其原因是,它的酒吧有责任决定应当如何来构建其基类。 (基础类的结构是酒吧的实现的一部分,以及面向对象的原则之一是包封-隐藏实现到外部)



Answer 2:

就拿要执行出的任何共享逻辑foobar构造。

创建一个方法foobar名为initialize,签名是void initialize(int i)

从调用构造函数中这种方法foo

当然,这不会跳过构造bar



Answer 3:

我想你想从一个语言功能,这不是设计用来工作方式的一些具体行为。 种类似,例如,使用异常来控制正常应用程序流。

也许你可以给我们更多的详细信息,然后得到一个建议,是更适合你想要做什么。



Answer 4:

+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)
    {

    }
}


文章来源: Calling a second level base class constructor