2010-07-14 87 views
3

请告诉我现在做这个的区别:和这两个访问器/ getter/setter方法之间的区别?

public string Title { get; set; } 

这样的:

public string Title; 

早在一天人们总是说使用的存取方法与私有变量被公众访问调用,现在.NET取得了;组;语句如此简化以至于在没有私有变量的情况下它们看起来几乎相同,因为它只是使用公共唯一变量,所以重点和区别是什么?

+0

http://stackoverflow.com/questions/3195075/clean-code-should-objects-have-public-properties – onof 2010-07-14 11:07:35

+0

[属性与字段的可能重复:需要帮助理解属性在字段上的用法。]( http://stackoverflow.com/questions/3069901/properties-vs-fields-need-help-grasping-the-uses-of-properties-over-fields) – 2010-07-14 11:08:12

+0

我明白对字段的属性需求,但在该语法,现在没有区别? – David 2010-07-14 11:09:50

回答

8

我对此有一篇文章:Why properties matter

简而言之:属性是API的一部分。字段是实现的一部分。不要将您的实施暴露给世界。您可以更改自动实现的属性,以便采用源代码和二进制兼容的方式来实现更多行为(例如,可能会记录日志)。你不能在一个领域做到这一点。

0

在第二种情况下,您不能修改访问器的实现(因为不是访问器)而无需重新编译相关程序集。

2

第一个

public string Title { get; set; } 

是一个属性(这实际上是一个功能)。

第二个

public string Title; 

是一个字段。

这是很好的使用属性来隐藏实现(封装)。

+0

BUt没有暗示隐藏在这里? – David 2010-07-14 11:11:19

+0

确实没有。但是您可能会在某一天添加​​一个,或者会出现需要更改内部实现的内容,以便您可以在不更改界面的情况下执行此操作。 – 2010-07-14 11:24:24