2

我的问题可能是一个老话题的一部分——“属性与字段”。

我有一种情况,变量对于外部类是只读的,但需要在类内部进行修改。我可以通过两种方式来处理它:

第一的:

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

第二:

public Type MyProperty { get; private set; }

在阅读了几篇文章(主要介绍了使用公共属性而不是公共字段的好处)之后,我不知道第二种方法是否比第一种方法有一些优势,但编写的代码更少。我很感兴趣在项目中使用哪个更好(以及为什么),或者这只是个人选择。

也许这个问题不属于SO所以我提前道歉。

4

6 回答 6

2

第二个版本产生的混乱较少,但灵活性较差。我建议你使用第二个版本,直到你遇到需要第一个版本的情况,然后重构 - 无论如何更改都将是类本地的,所以不要太担心!

一般来说,少写代码是个好主意。您编写的代码越少,产生的错误就越少:)

于 2012-06-29T09:14:19.630 回答
2

无论如何,第二个几乎都会编译成第一个,因此 IMO 总是使用第二个,因为它的代码更少且更整洁。

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

private List<string> _items;
...

public List<string> Items
{
    get
    {
        if (_items == null)
        {
            _items = new List<string>();
            // load items
        }
        return _items;
    }
}
于 2012-06-29T09:16:58.507 回答
2

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

于 2012-06-29T09:19:24.670 回答
1

请通过以下问题。它看起来一样,

https://softwareengineering.stackexchange.com/questions/72495/net-properties-use-private-set-or-readonly-property

于 2012-06-29T09:15:43.383 回答
0

对于调试,第二个是最好的。否则,您必须在设置字段的每个位置放置断点。使用第二个,您在属性集上放置一个断点。

于 2012-06-29T09:14:28.957 回答
0

就我个人而言,我更喜欢第二个版本,因为它写得更少,所以我可以用时间来做更复杂的编码......加上我认为它促进了懒惰的开发

于 2012-06-29T09:19:24.510 回答