2012-06-29 44 views
2

我的问题可能是一个老话题的一部分 - “属性vs领域”。哪一个更适合具有自动实现的属性,私有setter或私有域和属性只是getter?

我在那里变量是只读的课外但需要一个类内部进行修改的情况。我可以接近它在两个方面:

第一:

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

二:

public Type MyProperty { get; private set; } 

阅读几篇文章之后(即主要介绍了使用公共属性,而不是公共领域的利益)我做如果第二种方法比第一种方法有一些优势,但不会写出更少的代码。我感兴趣的是哪一个更适合在项目中使用(以及为什么)或者它只是个人选择。

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

+0

我认为你可以用更少的灵活性的第二个 – V4Vendetta

回答

2

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

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

+1

例继续 - 如果你想给一个默认的初始值,你的私人领域,你必须仅限第一次使用。 – Anchit

+0

第二种方法不灵活的方式是什么? @Anchit你可以在构造函数中设置默认值,就像使用私有字段一样。 – James

+0

@詹姆斯,如果你想在设置/获取之前对后台做任何事情,那么你需要实现一个后台字段。但以后可以轻松完成,而且几乎不需要。 –

0

为了调试第二个是最好的。否则,您必须在设置该字段的每个位置放置断点。随着第二个你在属性的集合上放置一个断点。

2

第二个将几乎编译到第一个无论如何,所以IMO总是使用第二个,因为它是不太&整洁的代码。

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

private List<string> _items; 
... 

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

+1,我也一直这样做! –

+0

它可能看起来像一个微型的优化,以最民间,但是,它扮演它的一部分,当你开始写的,其中的内存资源有限的移动设备应用程序。 – James

0

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

2

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

相关问题