Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 构造函数是否可以包含确定要调用哪些其他构造函数重写的逻辑?_C#_.net_Constructor - Fatal编程技术网

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

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

    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),如果它不会被大量使用,或者只是为了更容易调用。