在构造函数中初始化属性的好处?

时间:2017-04-19 19:41:27

标签: c#

我注意到我们的代码库中有一些地方在构造函数中初始化属性,如下所示:

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?

2 个答案:

答案 0 :(得分:1)

你忘了意识到在两个版本的构造函数中它实际上做同样的事情......那就是你的构造函数正在执行某种默认初始化。对于值类型,即使您未明确初始化,也将为default(valuetype),但对于引用类型,它将为null。此外,将空集合返回给调用者总是比返回null更好,因此构造函数执行默认初始化this.Accounts= new List<Accounts>();

我没有看到一个版本比另一个版本有任何特定的好处,但如果您使用Microsoft StyleCop,那么它可能会对第二个版本(猜测)发出一些警告。

答案 1 :(得分:1)

您显示的示例没有任何好处,因为您要为这些属性分配默认值。无论如何,编译器都会为您完成此操作。

在构造函数中分配 public 属性也没有什么好处,只能说明认为该属性的默认值是什么。

构造函数的实际值是将值赋给对象的私有状态。所以这并没有反映在你展示的例子中。

相关问题