我做了一些谷歌搜索但找不到任何东西。所以我实现了一些使用中间构造函数的东西。
但是,我想知道是否可以同时链接多个构造函数(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)
{
}
答案 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);
}