gpt4 book ai didi

c# - 哪个更正确,为什么?

转载 作者:太空宇宙 更新时间:2023-11-03 22:14:55 24 4
gpt4 key购买 nike

哪个更好实现还是没有区别?

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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com