链接几个构造函数c#

时间:2012-08-02 13:07:50

标签: c#

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

但是,我想知道是否可以同时链接多个构造函数(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)
{

}

3 个答案:

答案 0 :(得分:1)

  

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

没有。您可以横向链接(this),并多次链接,或“向上”(base),只需一次。

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

你的BlaNode(Node, Node)是'挑选'基础构造函数的人。假设允许BlaNode()选择不同的基础构造函数。这只会导致混淆使用哪种ctor,以及使用什么参数。

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

答案 1 :(得分:1)

不,您只能在C#构造函数初始值设定项中一次调用一个构造函数。 documentation仅指向另一个要调用的构造函数:

  

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

如果您不想要任何其他代码来调用它,您可以创建中间构造函数private

答案 2 :(得分: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);
}