我理解提供一个间接访问类成员的接口的好处.我的问题是:并不是你已经可以用任何OO语言完成的东西(有些东西)
public int NormalClass::getQuality() {
return this->quality;
}
Run Code Online (Sandbox Code Playgroud)
和
protected void NormalClass::setQuality(int q) {
this->quality = q;
}
Run Code Online (Sandbox Code Playgroud)
?
除了纯粹的美学外,.NET属性还提供了哪些额外的好处?
如果你能为它做出令人信服的论证,我会接受"可读性"; 但就个人而言,我倾向于认为get/set函数比属性更具可读性,因为它明确地是一个函数而不是一个直接值.
编辑:感谢大家的回答!这对我来说真的很有用; 总结一下我从所有人那里收集/学到的东西,以下是我到目前为止得出的一些结论:
现在,到目前为止,有两点已经在2或3个答案中做出,我个人觉得有点可疑:这些属性意味着廉价的读/写操作,因此可以与简单变量基本相同的方式使用.我关于这一点的问题是,实际上强制执行此操作的属性中没有固有的东西; 这只是他们如何应该使用.对我来说,这是类似于一个"shouldBePrivate"限定符指示值应该只由它自己的类直接访问,但仍然可以从外部访问无论如何; 还是在街上巡逻的警察部队提醒我们,我们应该表现自己,但在我们开始犯罪时实际上并没有干涉(如果没有强制执行,它对我们真正做了什么?).
如果属性具有某种内置机制来确保读/写便宜,我会对这一点印象更深刻.
我继承了一个VB.NET Web站点项目,该项目面向.NET框架的第4版,其中包括以下行:
Public ReadOnly Property Foo(Optional ByVal MyShort As Short = -1, Optional ByVal MyBool As Boolean = True) As String
Get
'logic
return Bar
End Get
End Property
Run Code Online (Sandbox Code Playgroud)
我正在使用Visual Studio 2015并且无法使用该行构建项目,因为我收到错误"Visual Basic 10.0不支持只读自动实现的属性".
我遇到了一个问题,它描述了一个错误"VB 9不支持自动实现的属性"并指出了Roslyn编译器中的一个错误,并建议尽可能多地移动到App_Code之外以避免这个问题.
有没有人遇到这个错误,发现一个相对无痛的方式呢?
我已经考虑过将属性更改为函数的情况,因为当它是一个内部逻辑带有可选参数的readonly属性时,它似乎是合乎逻辑的; 在这种情况下,我不知道允许从App_Code移出任何东西.