我们应该将变量设置为null,false并在初始化时创建新对象吗?

时间:2012-09-03 14:53:07

标签: c# null

我在IBM页面上寻找.NET的一些filenet示例代码,我发现了这个:

namespace CESample
{
    // Represents the connection with the Content Engine.
    public class CEConnection
    {
        private IDomain domain;
        private IObjectStoreSet ost;
        private ArrayList osNames;
        private String domainName;
        private bool isCredentialsEstablished;

        // Constructor
        public CEConnection()
        {
            domain = null;
            ost = null;
            osNames = new ArrayList();
            domainName = null;
            isCredentialsEstablished = false;
        }

        //... other methods

这没关系,在创建对象时始终将每个变量设置为null?那个bool和新的ArrayList()怎么样?那是我们应该怎么做的?将布尔值始终设置为false?

4 个答案:

答案 0 :(得分:6)

除了数组列表之外的所有内容都是不需要的。

在执行构造函数内的代码之前,字段会自动使用各自的默认值进行初始化。

此代码等同于:

public class CEConnection 
{ 
    private IDomain domain; 
    private IObjectStoreSet ost; 
    private ArrayList osNames; 
    private String domainName; 
    private bool isCredentialsEstablished; 

    // Constructor 
    public CEConnection() 
    { 
        osNames = new ArrayList(); 
    } 

答案 1 :(得分:3)

从某种意义上来说,这是“好的”,它不会导致意外行为,浪费任何资源,或导致您的代码变得不那么可读。

这是不必要的,因为所有这些变量(osNames除外)在构造函数被调用时已经具有这些值。与局部变量不同,实例和静态变量总是有一个值(即使该值为null),因此在使用前不需要初始化。

答案 2 :(得分:1)

可以将它设置为任何可编译的值。

真正的问题是,“考虑到传递给构造函数的参数,这是一个有意义且有效的状态来启动这个类吗?”在这种情况下,这意味着没有参数。

这是构造函数的工作,将类放入以下状态:

  1. 适用于班级的语义。
  2. 与参数相关,如果有的话。
  3. 任何做到这一点的事情都没问题。

    任何不这样做的事情都是最重要的(因而很可能是不明智的)优化,这是一个严重的缺陷。

    相关地,任何方法或属性都有责任改变类的状态,使其保持有效状态。

答案 3 :(得分:0)

声明字段变量时,它会自动初始化为default(T)。对于引用变量,该值为null,对于布尔值为false,对于“numeric”ValueTypes为0(整数,双精度,十进制,...)

这些初始化者因此变得混乱。他们只是让代码更长。

请注意,ArrayList的默认值(T)也为null,因此您仍然需要将该值设置为ArrayList的新实例。