Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/334.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#_Constructor_Chaining - Fatal编程技术网

在C#中,进行构造函数链接的最佳/公认方法是什么?

在C#中,进行构造函数链接的最佳/公认方法是什么?,c#,constructor,chaining,C#,Constructor,Chaining,鉴于以下类别: public class MyClass { private string _param; public MyClass () { _param = string.Empty; } public MyClass (string param) { _param = param; } } 我在两种方式之间被撕裂,这两种方式将这些构建者联系起来: 第一个: public MyClass ()

鉴于以下类别:

public class MyClass
{
    private string _param;

    public MyClass ()
    {
        _param = string.Empty;
    }

    public MyClass (string param)
    {
        _param = param;
    }
}
我在两种方式之间被撕裂,这两种方式将这些构建者联系起来:

第一个

public MyClass () : this (string.Empty)
{
}

public MyClass (string param)
{
    _param = param;
}
第二个:

public MyClass ()
{
    _param = string.Empty;
}

public MyClass (string param) : this ()
{
    _param = param;
}

那么,从无参数构造函数还是从另一个角度进行链接更好呢?

对于您的示例,我会选择第一种方法。第二种方法实际上并没有消除您可能试图避免的任何代码重复,因为您仍然必须显式地设置
\u param
。第二种方法中的空
this()
调用是完全没有意义的。

我更喜欢第一种方法。构造函数的行为将始终是一致的和可预测的,而且它减少了代码重复。

从pramater less链到pramater

因此,使用默认VAL从出租方参数构造函数调用更多参数

public MyClass()
{
    MyClass(default value here);
}

public Myclass(value)
{
    _value = value;
}

我认为最好是从小到大进行链接,也就是说,当将默认值(string.empty)传递给参数化构造函数更有意义时,为什么要在构造函数中分配一个空字符串,然后再分配一个给定字符串呢,那么你应该清楚地使用第一种方法


一般规则是:从最不特定的构造函数到最特定的构造函数进行链接。

我也喜欢第一个。正如在从简单基类继承的复杂派生类中一样,您希望“复杂”构造函数建立在“基本”构造函数的功能上。

在您的情况下,第二个示例实际上没有意义,因为您重复了类成员的赋值(如果您使用
MyClass(string param)
构造函数)

如果链式构造函数正在“添加功能”,则第二种方法更有用

例如:

public MyClass ()
{
    _param0 = string.Empty;
}

public MyClass (string param1) : this ()
{
    _param1 = param1;
}

public MyClass (string param1, string param2) : this (param1)
{
    _param2 = param2;
}

在你的特殊情况下,第一个例子显然更合适,因为你只有一个任务分配给同一个成员。

事实上,这似乎是这里的共识。