我注意到我们的代码库中有一些地方在构造函数中初始化属性,如下所示:
public MyObject()
{
this.Id = Guid.Empty;
this.GroupId = Guid.Empty;
this.Name = string.Empty;
this.URL = string.Empty;
this.Accounts= new List<Account>();
}
public Guid Id { get; set; }
public Guid GroupId { get; set; }
public string Name { get; set; }
public string URL { get; set; }
public List<Account> Accounts { get; set; }
然后一些地方只是初始化具有相同类型属性的构造函数:
public MyObject()
{
this.Accounts= new List<Accounts>();
}
public Guid Id { get; set; }
public Guid GroupId { get; set; }
public string Name { get; set; }
public string URL { get; set; }
public List<Account> Accounts { get; set; }
然后只需在需要时为属性赋值。在构造函数中初始化这样的属性有什么好处/理由吗?我可以看到你为什么要初始化像List这样的对象,但为什么是字符串和Guids?
答案 0 :(得分:1)
你忘了意识到在两个版本的构造函数中它实际上做同样的事情......那就是你的构造函数正在执行某种默认初始化。对于值类型,即使您未明确初始化,也将为default(valuetype)
,但对于引用类型,它将为null
。此外,将空集合返回给调用者总是比返回null更好,因此构造函数执行默认初始化this.Accounts= new List<Accounts>();
我没有看到一个版本比另一个版本有任何特定的好处,但如果您使用Microsoft StyleCop
,那么它可能会对第二个版本(猜测)发出一些警告。
答案 1 :(得分:1)
您显示的示例没有任何好处,因为您要为这些属性分配默认值。无论如何,编译器都会为您完成此操作。
在构造函数中分配 public 属性也没有什么好处,只能说明你认为该属性的默认值是什么。
构造函数的实际值是将值赋给对象的私有状态。所以这并没有反映在你展示的例子中。