当从中读取或分配属性时,人们不会期望它执行大量工作.当setSomeValue(...)和getSomeValue(...)方法来代替,人们不应该感到惊讶的东西不平凡的可能引擎盖下回事.但是,现在C#给了世界属性,使用getter和setter方法似乎很愚蠢.你对此有什么看法?我应该将此Q标记为社区维基吗?
谢谢.
编辑:
在我的情况下,调用并不昂贵,但它触发在另一个类中设置相关属性,并可能将短消息写入日志文件(如果URL为空).这对房产来说太过分了吗?有什么选择.
LBu*_*kin 18
但是,现在C#给了世界属性,使用getter和setter方法似乎很愚蠢.
在考虑属性应该是多么昂贵之前,我建议你考虑一下你所建模的概念是否最能代表"某事物的属性".在语言中存在属性以表示其他实体的属性 - 如果SomeValue逻辑上不是它所属类型的属性,那么您应该考虑使用getter/setter方法.
C#中的属性是否应该执行大量工作?
话虽如此,它有助于尽可能降低物业价格.大多数开发人员希望属性是围绕它们所属类型的某个内部状态的高效包装器.违反这种期望使开发人员更难编写使用该属性的性能良好的代码.例如,如果一个属性被用作for循环的条件,那么它将在每次迭代时进行评估 - 如果它很昂贵......那么可能很糟糕.
通常也会在调试器中访问属性 - 您不希望属性执行昂贵的逻辑,因为这会阻止调试.执行具有副作用的操作的属性获取器(例如,查询数据库)通常也是一种不好的做法,因为它们可以在检查调试器中的应用程序行为时引入heisenbug.
有什么选择.
您可能还想阅读这个答案,该答案为房产设计提供了一些很好的一般指导.我还建议您阅读MSDN上.NET设计指南中的选择属性和方法.
有时创建一个只读(没有setter)的属性是有意义的,但是存在一个或多个单独的方法来设置与该属性相关的内部状态.是否使用此习语取决于对象上的操作是否在语义上暴露为"更改状态"或"执行活动".当它是后者时,我倾向于使用方法(而不是属性设置器)来表达这种行为.
| 归档时间: |
|
| 查看次数: |
1698 次 |
| 最近记录: |