【问题标题】:In C#, what is the best/accepted way of doing constructor chaining?在 C# 中,进行构造函数链接的最佳/可接受的方式是什么?
【发布时间】:2009-09-22 17:55:22
【问题描述】:

给定以下类:

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;
}

那么,从无参数构造函数中链接更好还是相反?

【问题讨论】:

    标签: c# constructor chaining


    【解决方案1】:

    以你的例子,我会走第一种方式。第二个实际上并没有消除您可能试图避免的任何代码重复,因为您仍然必须显式设置_param。第二种方法中的空this() 调用是完全免费的。

    【讨论】:

    • 确实,而且这里似乎是共识。
    【解决方案2】:

    我更喜欢第一个。这样,构造函数的行为将始终是连贯的和可预测的,而且它减少了代码重复。

    【讨论】:

      【解决方案3】:

      从 pramater 到 pramater 的链,

      所以从带有默认值的出租参数构造函数调用到更多参数

      public MyClass()
      {
          MyClass(default value here);
      }
      
      public Myclass(value)
      {
          _value = value;
      }
      

      【讨论】:

        【解决方案4】:

        我想从小到大链接总是更好,即为什么在将默认值 (string.Empty) 传递给参数化构造函数更有意义时,为什么要在构造函数中分配一个空字符串而不是给定字符串。

        【讨论】:

          【解决方案5】:

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

          【讨论】:

            【解决方案6】:

            在您的情况下,第二个示例确实没有意义,因为您重复分配了类成员(如果您使用 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;
            }
            

            在您的特定情况下,第一个示例显然更合适,因为您只有一个分配给同一成员。

            【讨论】:

              【解决方案7】:

              如果您在此处将您的目标声明为“在未指定值时提供默认值”,那么您应该清楚地使用第一种方法。

              一般规则是:从最不具体的构造函数到最具体的构造函数。

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 2015-08-03
                • 2010-12-21
                • 2017-12-11
                • 1970-01-01
                • 2019-12-24
                • 1970-01-01
                • 2022-12-11
                • 1970-01-01
                相关资源
                最近更新 更多