2009-11-12 87 views
40

爲什麼微軟走了製作依賴屬性和依賴對象的路線,而不是使用反射和可能的屬性?爲什麼依賴屬性?

+0

因此,依賴項屬性的默認值被存儲在哪裏。他們也在消耗記憶力,不是嗎?另外,如果我們改變文本框控件的「Text」dp,那麼改變後的值將只存儲在該對象的Hashtable(特定的文本框)中?如果是這樣的話,那麼默認值+改變了數值......加倍了memory..ufff。讓我知道你的意見,Regards Rakesh www.qtricks.com – 2011-12-03 10:09:25

+0

@Rajesh庫馬爾:默認值存儲靜態。因此,減少的足跡,因爲你只有一個值的所有實例。 – user879355 2012-07-04 08:14:00

回答

64

這幫助我理解了一個道理:

的主要區別是,一個正常的.NET屬性的值直接從您類私有成員閱讀,而DependencyProperty的價值當調用從DependencyObject繼承的GetValue()方法時,動態解析爲

當設置它並不存儲在你的對象的字段依賴項屬性的值,但在詞典鍵和值由基類的DependencyObject提供。條目的關鍵是屬性的名稱,值是您要設置的值。是

依賴屬性的優點如下:

減少了內存佔用

這是一個巨大耗散存儲字段爲每個屬性,當你認爲一個UI的性能超過90%控制通常保持其初始值。依賴屬性通過僅在實例中存儲修改的屬性來解決這些問題。默認值在依賴項屬性中存儲一次。

值繼承

當你訪問一個依賴屬性的值是通過使用值解析策略解決。如果未設置本地值,則依賴項屬性會導航邏輯樹直至找到值。當您在根元素上設置FontSize時,它將應用於下面的所有文本塊,但您會覆蓋該值。

更改通知

依賴屬性有一個內置的更改通知機制。通過在屬性元數據中註冊回調,當屬性的值發生變化時,您會收到通知。這也被數據綁定使用。

來自:WPF Tutorials

+1

感謝您的好評。即使閱讀了關於DP的所有MSDN文檔之後,我仍然有些迷惑,直到我閱讀您的回覆。 – 2010-12-06 01:05:43

8

Dependency properties解決與反射和屬性解決不同的使用場景。

依賴屬性爲標準屬性無法處理的事情提供了一個統一的API。