C# 构造函数是否可以包含确定要调用哪些其他构造函数重写的逻辑?
在C#中可以决定在构造函数中使用哪个其他重写构造函数?下面的代码无法编译!我不知道使用哪种调用C# 构造函数是否可以包含确定要调用哪些其他构造函数重写的逻辑?,c#,.net,constructor,C#,.net,Constructor,在C#中可以决定在构造函数中使用哪个其他重写构造函数?下面的代码无法编译!我不知道使用哪种调用 public IntRange(int val, bool isMax) : isMax ? this() : this() { if (isMax) { IntRange(0, val); } else { IntRange(val, int
public IntRange(int val, bool isMax)
: isMax ? this() : this()
{
if (isMax)
{
IntRange(0, val);
}
else
{
IntRange(val, int.MaxValue);
}
}
您可以在对象上使用静态方法实现这类功能,如下所示
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);
}
}
}
您甚至可以将构造函数设置为公共内部消息(intmin,intmax)
私有,以强制使用静态方法
我发现,当人们可能想创建一个子类时,构造这样的对象的静态方法特别有用。怎么样:
class IntRange {
public IntRange(int val, bool isMax)
: this(isMax ? 0 : val, isMax ? val : int.MaxValue) {
}
public IntRange(int min, int max) {
}
}
由于该语句,它无法编译 伊斯马克斯?this():this()
之后在构造函数中:只能调用基类构造函数或同一类的重载构造函数 不,只需将公共逻辑提取到私有方法中,并根据
isMax
的值在构造函数中调用它们。似乎在调用任何构造函数之前做出此决定会更好。而不是在C中。我认为这可以合法地在IL中进行。工厂法方法。美好的正如您所注意到的,在这种情况下,我通常会将非静态构造函数设置为私有的。我可能会将isMax设置为默认参数(false),如果它不会被大量使用,或者只是为了更容易调用。