5

在 C# 中可以决定在构造函数中使用哪个其他覆盖构造函数?下面的代码无法编译!我不知道使用哪个调用。

    public IntRange(int val, bool isMax)
        : isMax ? this() : this()
    {
        if (isMax)
        {
            IntRange(0, val);
        }
        else
        {
            IntRange(val, int.MaxValue);
        }
    }
4

3 回答 3

9

怎么样:

    class IntRange {
      public IntRange(int val, bool isMax)
        : this(isMax ? 0 : val, isMax ? val : int.MaxValue) {
      }
      public IntRange(int min, int max) {
      }
    }
于 2013-06-14T14:13:37.473 回答
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)设为私有,以强制使用静态方法。

我发现当人们可能想要创建一个子类时,构造这样的对象的静态方法特别有用。

于 2013-06-14T14:12:24.960 回答
0

由于语句 isMax 无法编译?this() : this() in a constructor after : 只能调用基类构造函数或同类的重载构造函数。

于 2013-06-14T14:19:55.863 回答