在C#中可以决定构造函数,其他覆盖构造函数使用哪个?以下代码无法编译!我不知道使用哪个调用。
public IntRange(int val, bool isMax)
: isMax ? this() : this()
{
if (isMax)
{
IntRange(0, val);
}
else
{
IntRange(val, int.MaxValue);
}
}
答案 0 :(得分:9)
怎么样:
class IntRange {
public IntRange(int val, bool isMax)
: this(isMax ? 0 : val, isMax ? val : int.MaxValue) {
}
public IntRange(int min, int max) {
}
}
答案 1 :(得分:2)
你可以在对象上使用静态方法实现这种事情,如下所示
class IntRange {
public IntRange(int min, int max) {
// write code here
}
public static IntRange Construct(int val, bool isMax) {
if (isMax) {
return new IntRange(0, val);
} else {
return new IntRange(val, int.MaxValue);
}
}
}
您甚至可以将构造函数public IntRange(int min, int max)
设为私有,以强制使用静态方法。
我发现构造像这样的对象的静态方法在人们想要创建子类时特别有用。
答案 2 :(得分:0)
由于声明,它无法编译 isMax? this():this() 在构造函数之后:您只能调用基类构造函数或同一类的重载构造函数。