我在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?
答案 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)
可以将它设置为任何可编译的值。
真正的问题是,“考虑到传递给构造函数的参数,这是一个有意义且有效的状态来启动这个类吗?”在这种情况下,这意味着没有参数。
这是构造函数的工作,将类放入以下状态:
任何做到这一点的事情都没问题。
任何不这样做的事情都是最重要的(因而很可能是不明智的)优化,这是一个严重的缺陷。
相关地,任何方法或属性都有责任改变类的状态,使其保持有效状态。
答案 3 :(得分:0)
声明字段变量时,它会自动初始化为default(T)
。对于引用变量,该值为null,对于布尔值为false,对于“numeric”ValueTypes为0(整数,双精度,十进制,...)
这些初始化者因此变得混乱。他们只是让代码更长。
请注意,ArrayList的默认值(T)也为null,因此您仍然需要将该值设置为ArrayList的新实例。