2

我做了一些谷歌搜索,但找不到任何东西。所以我实现了一些使用中间构造函数的东西。

但是,我想知道是否可以同时链接多个构造函数(base + this)。

这是我当前的(简化的)代码:

public BlaNode(Node Previous, Node Next) : base(Previous, Previous)
{
    this.Blas = new HashSet<BlaDiBla>();
}
public BlaNode()
    : this(null, null)
{

}
public BlaNode(Node Previous, Node Next, string Bla)
    : this(Previous, Previous)
{

}
4

3 回答 3

1

据我所知,这是不可能的。您可以为此使用静态工厂方法。http://en.wikipedia.org/wiki/Factory_method_pattern

private BlaNode(Node Previous, Node Next) : base(Previous, Previous)
{
    //whatever you do
}

public static BlaNode BlaNodeFactory()
{
    return new BlaNode(null, null);
}

public static BlaNode BlaNodeFactory(Node Previous, Node Next, string Bla)
{
    return new BlaNode(Previous, Previous);
}
于 2012-08-02T13:15:03.107 回答
1

是否可以同时链接多个构造函数(base + this)

不可以。您可以将任一侧链 ( this) 并多次这样做,或者“向上” ( base) 仅一次。

请注意,该符号与构造函数主体的执行顺序密切相关。

BlaNode(Node, Node)是“选择”基本构造函数的那个​​。假设BlaNode()允许选择不同的基本构造函数。这只会导致混淆将使用哪些 ctor(s) 以及使用哪些参数。

所以我看不到任何收获,肯定会有弊端。

于 2012-08-02T13:12:21.440 回答
1

不,您一次只能在 C# 构造函数初始化程序中调用一个构造函数。该文档也仅引用了另一个要调用的构造函数:

所有实例构造函数 (...) 都包含对另一个实例构造函数(... ) 的调用。隐式调用的构造函数由构造函数初始化器确定:

private如果您不希望任何其他代码调用它,则可以创建中间构造函数。

于 2012-08-02T13:13:41.087 回答