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

标签 c# poco

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

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/

相关文章:

c# - WinForms Form_Load 未调用

c# - ASP.NET Core 在默认域 (*.azurewebsites.net) 上跨 Azure Web 应用程序共享身份 Cookie

c++ - POCO HTTPS 请求验证服务器证书

entity-framework - MVC3 应用程序/服务层/存储库层/POCO 类/EF4 - 问题!

Azure,DocumentDB无法将POCO对象保存为文档

C#:Webservice 更改预期参数类型(从普通 POCO 更改为自动生成的类)

c# - 通过注入(inject)在构造函数中创建数据库调用

c# - asp.net MVC 4 0x80070005 - Javascript 运行时错误 : access denied

c# - System.Runtime.InteropServices.COMException (0x800706BA) : The RPC server is unavailable.(HRESULT 异常:0x800706BA)

android - 使用 ssl 时 POCO 库卡在 Android 上