在CLR via CSharp第10章「屬性」傑夫里氏寫道:爲什麼Property執行速度比Field或Method執行速度慢?
甲屬性方法可能需要很長的時間來執行;現場訪問始終 立即完成。使用屬性的一個常見原因是 執行線程同步,它可以永久停止線程, ,因此,如果需要線程 同步,則不應使用屬性。在那種情況下,一種方法是優選的。 另外,如果您的類可以遠程訪問(例如,您的類 從System.MarshalByRefObject派生),調用屬性 方法將非常緩慢,因此,方法優於 屬性。在我看來,從MarshalByRefObject 派生的類不應該使用屬性。
即使屬性被定義爲只返回私人字段,情況是這樣嗎?爲什麼方法首選同步?爲什麼在MarshalByRefObject場景中首選方法?
爲了澄清我的問題:
傑夫似乎在做一個一攬子聲明,說屬性不是可取的,在這兩種情況下,這些方法更可取。正如Joe White指出的,屬性可以具有任意代碼。但是方法可以運行相同的任意代碼。這是我遇到困難的部分。實際上在使用方法優於使用相同屬性的代碼(使用相同的代碼),還是僅僅在語言約定方面存在問題?
Jeff的觀點是,一個「GetBlah」方法調用*與讀者進行通信*「這可能會很慢」,而「Blah」屬性表示「這幾乎肯定是快速的」。所以,如果你想讓事情變得緩慢,那就把它變成一種方法吧。我並不完全同意這個建議 - 例如,我經常製作速度緩慢(*不太可能出現最壞情況),但具有優異*攤銷*表現的物業。但傑夫的建議絕對是一個很好的起點;一旦你知道你在做什麼,就會偏離它。 – 2012-02-06 15:09:39