在CLR via CSharp第10章“属性”杰夫里氏写道:为什么Property执行速度比Field或Method执行速度慢?
甲属性方法可能需要很长的时间来执行;现场访问始终 立即完成。使用属性的一个常见原因是 执行线程同步,它可以永久停止线程, ,因此,如果需要线程 同步,则不应使用属性。在那种情况下,一种方法是优选的。 另外,如果您的类可以远程访问(例如,您的类 从System.MarshalByRefObject派生),调用属性 方法将非常缓慢,因此,方法优于 属性。在我看来,从MarshalByRefObject 派生的类不应该使用属性。
即使属性被定义为只返回私人字段,情况是这样吗?为什么方法首选同步?为什么在MarshalByRefObject场景中首选方法?
为了澄清我的问题:
杰夫似乎在做一个一揽子声明,说属性不是可取的,在这两种情况下,这些方法更可取。正如Joe White指出的,属性可以具有任意代码。但是方法可以运行相同的任意代码。这是我遇到困难的部分。实际上在使用方法优于使用相同属性的代码(使用相同的代码),还是仅仅在语言约定方面存在问题?
Jeff的观点是,一个“GetBlah”方法调用*与读者进行通信*“这可能会很慢”,而“Blah”属性表示“这几乎肯定是快速的”。所以,如果你想让事情变得缓慢,那就把它变成一种方法吧。我并不完全同意这个建议 - 例如,我经常制作速度缓慢(*不太可能出现最坏情况),但具有优异*摊销*表现的物业。但杰夫的建议绝对是一个很好的起点;一旦你知道你在做什么,就会偏离它。 – 2012-02-06 15:09:39