哪个更好实现还是没有区别?
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
变量设为只读。
如果这就是你的意思,因为你不需要在类中的任何地方重新分配变量(可能在构造函数中除外),那么我认为这比自动属性版本更可取。
它明确表明这是意味着是只读的 - 而自动属性只表明它对于外界是只读的.稍后有人(也许是您)可能会在类中 更改自动属性的值,而忘记了最初的设计是将其设置为只读属性。
(当然,我们并不是真正在谈论完全不变性,因为任何人都可以在列表中添加或删除条目。)
如果您确实希望能够在类中更改属性值,请务必使用第一个版本。
表达了对只读字段版本的偏好后,在实践中我发现自己使用自动属性,因为它的读写代码更少。不过,每次我这样做时,我都觉得很脏。理想情况下,我想要一种创建只读自动实现属性的方法,该属性只能在构造函数中设置,就像只读字段一样。 (该属性将由一个只读字段支持,并且 setter 调用将被直接编译到字段分配中。)不过,我还没有听说过任何实际发生这种事情的计划。
关于c# - 哪个更正确,为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5435091/