【发布时间】:2012-02-06 14:07:07
【问题描述】:
在CLR via CSharp 第 10 章“属性”中,Jeff Richter 写道:
属性方法可能需要很长时间才能执行;始终访问字段 立即完成。使用属性的一个常见原因是 执行线程同步,可以永远停止线程, 因此,如果线程不应该使用属性 需要同步。在那种情况下,一种方法是优选的。 此外,如果您的班级可以远程访问(例如,您的班级 派生自 System.MarshalByRefObject),调用属性 方法将非常慢,因此,一种方法优于 财产。在我看来,从 MarshalByRefObject 派生的类 永远不要使用属性。
即使属性被定义为只返回私有字段,是否也是这种情况?为什么同步时首选方法?为什么在 MarshalByRefObject 场景中首选 Method?
为了澄清我的问题:
Jeff 似乎在笼统地声明属性是不可取的,并且在这两种情况下方法更可取。正如 Joe White 所指出的,属性可以有任意代码。但是方法可以运行相同的任意代码。那是我遇到困难的部分。使用方法而不是属性(假设使用相同的代码)进行同步或编组实际上有优势,还是他只是语言约定有问题?
【问题讨论】:
标签: c# .net performance synchronization clr