2

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

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

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

4

4 回答 4

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(); 
    } 
于 2012-09-03T14:54:04.407 回答
3

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

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

于 2012-09-03T14:55:30.700 回答
1

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

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

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

  1. 对类的语义有效。
  2. 与参数相关(如果有)。

这样做的任何东西都很好。

任何不这样做的东西充其量是一个沉重的(因此很可能是不明智的)优化,更糟糕的是一个严重的缺陷。

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

于 2012-09-03T14:57:49.497 回答
0

声明字段变量时,它会自动初始化为default(T). 这对于引用变量为 null,对于布尔值为 false,对于“数字”值类型(整数、双精度、小数,...)为 0

因此,这些初始化程序很混乱。他们只是使代码更长。

请注意,ArrayList 的 default(T) 也是 null,因此您仍然必须将其设置为 ArrayList 的新实例。

于 2012-09-03T14:59:47.903 回答