【发布时间】:2010-11-04 09:50:20
【问题描述】:
我了解提供间接访问类成员的接口的诸多好处。我的问题是:这不是你可以用任何 OO 语言使用(类似的东西)完成的事情
public int NormalClass::getQuality() {
return this->quality;
}
和
protected void NormalClass::setQuality(int q) {
this->quality = q;
}
?
.NET 属性除了美观之外还有哪些额外的好处?
如果您能提出令人信服的论据,我将接受“可读性”;但就我个人而言,我倾向于认为 get/set 函数比属性更具可读性,因为它明确地是 函数 而不是直接值。
编辑:感谢大家的回答!这对我来说真的很有帮助;总结一下我从所有所说的中收集/学到的东西,以下是我到目前为止得出的一些结论:
- 属性的最大好处 并非来自特定的特征 属性本身,而是 从框架和 IDE 功能 以特殊方式处理属性; 例如,属性编辑器、XML 序列化,数据绑定。
- 属性可以被视为简单 以某些方便的方式取值 get/set 函数不能:在 特别是 obj.Prop++ 和 obj.Prop = 价值。
- 属性让你逍遥法外 使用快速而肮脏的代码 公众成员无需通过 实现一堆的头痛 稍后获取/设置功能;如果你 应该需要添加一些逻辑 和/或将公共成员设为私有, 你可以简单地介绍一个属性 并且不要冒险破坏任何旧代码。
现在,到目前为止,在 2 或 3 个答案中提出了一点,我个人觉得有些怀疑:属性意味着廉价的读/写操作,因此可以以与简单变量基本相同的方式使用。我对这一点的问题是,属性中没有任何固有的东西可以真正强制执行这一点。这只是应该如何使用它们。对我来说,这类似于“shouldBePrivate”限定符,它指示值应该只能由其自己的类直接访问,但无论如何仍可以从外部访问;或者警察在街上巡逻以提醒我们应该表现自己,但在我们开始犯罪时实际上并不干预(如果不强制执行,它对我们有什么真正的作用? )。
如果属性有某种内置机制来确保读取/写入的廉价性,我会对这一点印象深刻。
【问题讨论】:
-
...就因为可以,呵呵
-
“如果属性有某种内置机制来确保读/写便宜” - 这有点像说“如果 [你最喜欢的 GUI 框架] 有某种内置机制会更好-in 机制确保人们不会编写糟糕的 UI”。唉,唯一的机制被称为“程序员”。 (或设计师,或可用性研究,或其他。)编译器可以帮助你,但你必须承担一些责任,不要写出糟糕的代码。
-
Joe,我认为这基本上是我的观点:使用属性本身不能保证廉价的读/写。这是程序员的责任。我并不是在争论框架拥有一个标准的、认可的方法来实现快速访问属性是一个好主意。相反,我质疑那些将属性的这种事实上的特性作为功能优势的答案,就好像它是 .NET 开发人员努力提供的一些特殊特性一样。
标签: .net oop properties