哪个更好的实现还是没有区别?
1。
public class Simple
{
public IList<string> Entries { get; private set; }
public Simple()
{
Entries = new List<string>();
}
}
或2。
public class Simple
{
private readonly IList<string> entries = new List<string>();
public IList<string> Entries { get { return entries; } }
}
最佳答案
我假设对于第二个版本,您的意思是:
public class Simple
{
private readonly IList<string> entries = new List<string>();
public IList<string> Entries { get { return entries; } }
}
请注意,我已将
entries
变量设为只读。如果那是您的意思,因为您不需要在类中的任何地方(可能在构造函数中)重新分配变量,那么我认为这比自动属性版本更好。
它清楚地表明这意味着它是只读的-而auto属性仅表明它对外界是只读的。某人(也许是您)最终可能会在以后从类中更改automatic属性的值,而忘记了原来的设计将其视为只读属性。
(当然,我们并不是真正在谈论完全不变性,因为任何人都可以从列表中添加或删除条目。)
如果您确实希望能够在类中更改属性值,请绝对使用第一个版本。
在表达了对只读字段版本的偏爱之后,在实践中,我发现自己使用了自动属性,因为它读写的代码更少。每次我都感到肮脏。理想情况下,我想要一种创建只读自动实现属性的方法,该属性只能在构造函数中设置,就像readonly字段一样。 (该属性将由一个只读字段支持,并且setter调用将被直接编译为字段分配。)我还没有听说过任何实际发生这种事情的计划。