繁体   English   中英

拥有带有私有设置程序或私有字段且拥有属性的自动实现属性的哪个更好?

[英]Which one is better to have auto-implemented property with private setter or private field and property just getter?

我的问题可能是一个旧主题的一部分-“属性与字段”。

我遇到的情况是,变量对于外部类是只读的,但需要在类内部进行修改。 我可以通过2种方法来解决:

第一:

private Type m_Field;
public Type MyProperty { get { return m_Field; } }

第二:

public Type MyProperty { get; private set; }

在阅读了几篇文章之后(大部分内容涵盖了使用公共属性而不是公共领域的好处),我不知道第二种方法是否比第一种有优势,但是编写的代码更少。 我有兴趣在项目中使用哪种方法更好(为什么),或者这只是个人选择。

也许这个问题不属于SO,所以我先向您道歉。

第二个版本产生的杂波较少,但灵活性较差。 我建议您使用第二个版本,直到遇到必须使用第一个版本然后进行重构的情况为止-更改将始终是该类的本地内容,因此不必为此担心太多!

通常,编写更少的代码是一个好主意。 您编写的代码越少,产生的错误也越少:)

无论如何,第二个将几乎可以编译为第一个,因此IMO始终使用第二个,因为它的代码更简洁。

我倾向于使用第一种方法的唯一场景是当我想延迟加载属性时,例如

private List<string> _items;
...

public List<string> Items
{
    get
    {
        if (_items == null)
        {
            _items = new List<string>();
            // load items
        }
        return _items;
    }
}

第二个版本较短,所以我认为通常会更好。 例外是,当唯一的写访问发生在构造函数中时。 然后,我更喜欢第一个版本,因为这允许将该字段标记为readonly

对于调试,第二个是最好的。 否则,您将不得不在设置该字段的每个位置放置断点。 在第二个步骤中,您在属性集上设置了一个断点。

我个人比较喜欢第二个版本,因为它写的少,所以我可以花些时间做更复杂的编码。。。在我看来,它还可以促进延迟开发。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM