我了解提供接口(interface)以间接访问类成员的许多好处。我的问题是:这不是你可以用任何 OO 语言使用(类似的东西)完成的事情吗?
public int NormalClass::getQuality() {
return this->quality;
}
和
protected void NormalClass::setQuality(int q) {
this->quality = q;
}
?
除了纯粹的美学之外,.NET 属性还提供了哪些额外的好处?
如果你能提出令人信服的论据,我会接受“可读性”;但就我个人而言,我倾向于认为 get/set 函数比属性更具可读性,因为它无疑是 功能 与直接值(value)相反。
编辑:感谢大家的回答!这对我来说真的很有帮助;总结一下我从已经说过的所有内容中收集/学到的东西,以下是我到目前为止得出的一些结论:
并非来自特定的特征
属性本身,而是
从框架和 IDE 功能
以特殊方式处理属性;
例如,属性编辑器、XML
序列化,数据绑定(bind)。
以某些方便的方式取值
get/set 函数不能:在
特别是 obj.Prop++ 和 obj.Prop =
值(value)。
使用快速而肮脏的代码
公众成员无需通过
实现一堆的头痛
稍后获取/设置功能;如果你
应该需要添加一些逻辑
和/或将公共(public)成员设为私有(private),
你可以简单地介绍一个属性
并且不要冒险破坏任何旧代码。
现在,到目前为止,在 2 或 3 个答案中提出了一点,我个人觉得有些可疑:属性意味着廉价的读/写操作,因此可以以与简单变量基本相同的方式使用。我对这一点的问题是,属性中没有任何固有的东西可以真正强制执行这一点。这就是他们的样子假设 要使用的。对我来说,这类似于“shouldBePrivate”限定符,它指示一个值只能由其自己的类直接访问,但无论如何仍可以从外部访问;或者警察在街上巡逻,提醒我们应该守规矩,但在我们开始犯罪时实际上并不干预(如果不强制执行,它真的对我们有什么作用?)。
如果属性有某种内置机制来确保读/写的廉价性,我会对这一点印象深刻。
最佳答案
Jon Skeet 在他的 C# 文章博客上对 why properties matter 有一个很好的概述。 .在其中他解释了为什么应该使用属性而不是暴露公共(public)字段。
至于为什么要使用属性而不是 getter/setter 方法,我建议以下想法:
A.x = B.y = C.z
关于.net - 为什么我们使用 .NET 属性而不是普通的旧 get/set 函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1019571/