C# 私有属性 - 它们被使用/有意义吗?

Posted

技术标签:

【中文标题】C# 私有属性 - 它们被使用/有意义吗?【英文标题】:C# private properties - are they used/make sense? 【发布时间】:2012-01-08 09:46:21 【问题描述】:

我刚开始是一名 C# 爱好者,在我看来,属性应该始终是公开的。私有财产没有意义。会吗?

会这样吗:

private string propertyOne get; set;

相当于这个:

public string propertyOne private get; private set;

【问题讨论】:

是的,它们是等价的。如果您正在编写一个类供其他人使用,那么您的文件中可能存在您不希望他们访问的内容。例如,也许有人想要获得利率,但您不希望他们能够更改利率的值。在这种情况下,您可以执行 public double rate get;私人集; 请注意:面向库开发人员的 .NET 设计指南指定属性应为 Pascal Cased。 msdn.microsoft.com/en-us/library/x2dbyw72%28v=vs.71%29.aspx 最新链接是msdn.microsoft.com/en-us/library/ms229043.aspx。发布的链接来自 .NET 1.1。 【参考方案1】:

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

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

【讨论】:

【参考方案2】:

使用属性的想法是封装而不是仅仅将原始变量呈现给“外部世界”。这样,您还可以在访问器中添加额外的逻辑。

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

不过,使用私有设置器查看公共属性的情况并不少见。

【讨论】:

【参考方案3】:

是的,这两位代码是等价的。我从未使用自动 getter/setter 创建私有属性。似乎不是很有用。我已经使用了私有属性和 getter 的实际实现。私有 get 方法(或属性 getter)可能很有用。

【讨论】:

【参考方案4】:

在您的问题中,是的,后者在功能上与前者相同,但这样实现它是没有意义的。

我倾向于使用

public string propertyOne get; private  set;

有时我希望它公开可用,但只有它存在的类才能设置值。但大多数情况下,当您想将其他逻辑封装到 getter 和 setter 中以执行其他功能时也是如此。

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

【讨论】:

您的示例 propertyOne 是世界可设置的,但仅供私人阅读。这是你的意图吗?

以上是关于C# 私有属性 - 它们被使用/有意义吗?的主要内容,如果未能解决你的问题,请参考以下文章

由于私有继承而无法访问的类型

c#接口公共私有[重复]

C# 自动属性来包装私有字段?

在没有 UITableViewController 的情况下使用 NSFetchedResultsController 有意义吗?它们有啥关系?

C#中继承类为啥可以通过属性访问基类的私有字段。

在 docker 中运行 c# worker 服务有意义吗?