我可以从另一个构造函数调用构造函数吗(作为常规方法)?
问题描述:
假设我有2个构造函数。我可以从另一个构造函数调用构造函数吗(作为常规方法)?
public class MyClass
{
public MyClass()
{
int id = 0;
//Same behaviour
}
Public MyClass(int id)
{
//Same behaviour
}
}
两个结构都实现相同的行为。唯一的区别是,如果第一个构造函数被调用并且id = 0的值;
我的问题是知道我是否可以调用第二个构造函数,而不是实现相同的行为?如果可能的话,我能做到吗?
答
是的,这被称为构造函数链。它的实现,像这样:
public class MyClass {
public MyClass() : this(0) { }
public MyClass(int id) {
this.id = id;
}
}
请注意,您可以链接到基类的构造函数,像这样:
public class MyClass : MyBaseClass {
public MyClass() : this(0) { }
public MyClass(int id) : base(id) { }
}
public class MyBaseClass {
public MyBaseClass(int id) {
this.id = id;
}
}
如果有一个基类,你不指定一个构造函数链,如果有的话,默认是可访问的无参数构造函数。如果你没有指定一个链接到的构造函数,并且没有可访问的无参数构造函数,那么你将得到一个编译时错误。
答
你可以这样做:
public class MyClass {
public MyClass() : this(0) {
}
public MyClass(int id) {
}
}
这里的Microsoft's documentation就可以了。 (你必须向下滚动;尝试搜索: this
)
答
public class MyClass
{
public MyClass() : this(0)
{
}
public MyClass(int id)
{
//Same behaviour
}
}
答
为什么不把这个相同的行为放在一个私有函数中?
答
如果这是C#4,另一种是使用默认值的构造函数的参数(这实际上使得可选):
public MyClass(int id = 0) { ...
我觉得这是你的榜样的理想解决方案。
但是这取决于你是否愿意使用这个类作为一个构造函数约束的类型参数类型参数...
+0
真的很好。谢谢。 – Richard77
为什么不链构造? –