2011-11-29 22 views
3

我最初是作为一名C#爱好者开始的,在我看来,房产应该永远是公开的。私有财产是没有意义的。会吗?C#私有属性 - 他们使用/有意义吗?

这会:

private string propertyOne {get; set;} 

相当于此:

public string propertyOne {private get; private set;} 
+0

是的,这些是等同的。如果您正在为别人编写课程,可能会在您的文件中存在一些您不希望他们访问的内容。例如,也许有人会想要获得利率,但你不希望他们能够改变利率的价值。在这种情况下,你可以做公开双倍{get;私人设置;} – samack

+2

只需注意:.NET开发人员的.NET设计指南指定属性应该是Pascal Cased。 http://msdn.microsoft.com/en-us/library/x2dbyw72%28v=vs.71%29.aspx – Alan

+2

最新的链接是http://msdn.microsoft.com/en-us/library/ ms229043.aspx。发布的链接来自.NET 1.1。 –

回答

11

是的,私人财产可能是有意义的,特别是在你想要在getter/setter中实现逻辑的情况下。你可能只希望这些类可以在类中访问(因此它们是私有的),但是你仍然想要将getter/setter逻辑封装在一个地方。

您打印的两行代码之间存在差异。反映公共财产的人不会看到第一个,但他们会看到第二个,即使他们不能调用getter/setter。

4

使用物业的想法是封装,而不是仅仅提出一个原始变量的“外面的世界”。这样你可以在你的访问器中有一个额外的逻辑。

所以不,纯粹的私人财产不会是通常的用例。

虽然看到公共财产与私人二传手是很常见的。

0

在你的问题中,是的,后者将在功能上等同于前者,但是将其作为实现它是没有意义的。

我倾向于使用

public string propertyOne {get; private set;} 

,因为有时候我想它公开可用,但它能够设定的值只存在于类。但大多数情况下,它也是当你想要将其他逻辑封装到getters中时,setter可以执行其他功能。

但它们通常是公共属性,以封装其他功能。

+0

您的示例propertyOne是世界可设置的,但只有私人可读。这是你的意图吗? –

+0

我注意到了,并且几秒前编辑了=) – Chris

0

是的,这两位代码是等价的。我从来没有创建一个私人财产与自动getter/setter。看起来不太有用。我已经使用私有属性和getter的实际实现。私有get方法(或属性getter)可能很有用。