【问题标题】:Initializing default values for private fields in constructors explicitely.. WTF?显式初始化构造函数中私有字段的默认值.. WTF?
【发布时间】:2011-04-06 04:13:54
【问题描述】:

考虑以下来自 .NET 4.0 库的代码 sn-p:

private T[] array; 
private static T[] emptyArray; 
private int size; 
private int version; 

static Stack() 
{ 
    Stack<T>.emptyArray = new T[0]; 
} 

public Stack() 
{ 
    array = Stack<T>.emptyArray; 
    size = 0; 
    version = 0; 
}

除了公司的编码标准之外,将值类型私有字段初始化为默认值(上例中的size 和version)是否有任何原因?

【问题讨论】:

    标签: c# constructor coding-style default-value


    【解决方案1】:

    我认为初始化集合通常是一种很好的做法,主要是因为它可以确保开发人员在使用时不需要初始化任何东西,而只是假设变量已被初始化。

    public class Store
    {
        public Store()
        {
            // Ready to go!
            Products = new List<Product>();
        }
    
        public string Id {get;set;}
        public IList<Product> Products {get;set;}
    }
    

    您跳过了必须检查集合是否已初始化的麻烦,如果没有这样做,否则... 打哈欠

    【讨论】:

      【解决方案2】:

      IMO,将私有变量初始化为它们的 默认 值没有必要也没有好处(除非它是标准的一部分)。

      编辑:几次,它可能是有意义的(因为它提高了代码的可读性) - 例如

      public const OP_GET = 0;
      public const OP_ADD = 1;
      ...
      
      private int operation = OP_GET;
      

      【讨论】:

        【解决方案3】:

        如果它们是原始数据类型,则无需初始化,它们将始终采用默认值

        int、long 等的默认值为 0,而 bool 的默认值为 false 等。

        如果它是一个引用类型,您可能需要初始化,以便它们具有一些默认值(根据您的逻辑)并避免空引用错误

        【讨论】:

          【解决方案4】:

          不,没有,至少不是技术原因。也许在某些情况下,人们可能会这样做来说明一点,例如,如果您有某种类型的计数器变量并且您想明确它从零开始。但我认为即使这样也有点问题。

          【讨论】:

            猜你喜欢
            • 2020-01-18
            • 2021-12-16
            • 2015-10-07
            • 2011-06-22
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2018-04-23
            相关资源
            最近更新 更多