哪一个更好的自动实现属性私有setter或私有字段和属性只是getter?

时间:2012-06-29 09:11:32

标签: c#

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

我的情况是变量对于外部类是只读的,但需要在类中进行修改。我可以用两种方式来接近它:

首先:

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

第二

public Type MyProperty { get; private set; }

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

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

6 个答案:

答案 0 :(得分:2)

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

通常,编写较少的代码是个好主意。你编写的代码越少,你产生的错误越少:)

答案 1 :(得分:2)

第二个将完全编译到第一个,所以IMO总是使用第二个,因为它更少&整洁的代码。

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

private List<string> _items;
...

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

答案 2 :(得分:2)

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

答案 3 :(得分:1)

答案 4 :(得分:0)

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

答案 5 :(得分:0)

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