爲什麼微軟走了製作依賴屬性和依賴對象的路線,而不是使用反射和可能的屬性?爲什麼依賴屬性?
爲什麼依賴屬性?
回答
這幫助我理解了一個道理:
的主要區別是,一個正常的.NET屬性的值直接從您類私有成員閱讀,而DependencyProperty的價值當調用從DependencyObject繼承的GetValue()方法時,動態解析爲。
當設置它並不存儲在你的對象的字段依賴項屬性的值,但在詞典鍵和值由基類的DependencyObject提供。條目的關鍵是屬性的名稱,值是您要設置的值。是
依賴屬性的優點如下:
減少了內存佔用
這是一個巨大耗散存儲字段爲每個屬性,當你認爲一個UI的性能超過90%控制通常保持其初始值。依賴屬性通過僅在實例中存儲修改的屬性來解決這些問題。默認值在依賴項屬性中存儲一次。
值繼承
當你訪問一個依賴屬性的值是通過使用值解析策略解決。如果未設置本地值,則依賴項屬性會導航邏輯樹直至找到值。當您在根元素上設置FontSize時,它將應用於下面的所有文本塊,但您會覆蓋該值。
更改通知
依賴屬性有一個內置的更改通知機制。通過在屬性元數據中註冊回調,當屬性的值發生變化時,您會收到通知。這也被數據綁定使用。
來自:WPF Tutorials。
感謝您的好評。即使閱讀了關於DP的所有MSDN文檔之後,我仍然有些迷惑,直到我閱讀您的回覆。 – 2010-12-06 01:05:43
Dependency properties解決與反射和屬性解決不同的使用場景。
依賴屬性爲標準屬性無法處理的事情提供了一個統一的API。
- 允許類提供大量的屬性而沒有開銷(因爲它們只在靜態使用時創建,而不是每個類一次)。對於
- 依賴項屬性系統以一致的方式處理諸如Attached Properties之類的內容,作爲標準依賴項屬性。
- 依賴屬性爲change tracking as well as validation提供了一個乾淨的API。
- 依賴屬性提供property value inheritance。
- 數據綁定時,依賴項屬性提供great performance benefits。
- 1. 目標屬性必須是依賴屬性 - 爲什麼?
- 2. 什麼是WPF中的依賴屬性
- 3. 依賴屬性
- 4. 依賴屬性
- 5. 註冊屬性作爲依賴屬性
- 6. 爲什麼依賴屬性被聲明爲靜態只讀?
- 7. WPF:CLR屬性依賴屬性
- 8. 什麼是「TemplatedParent模板屬性」依賴項屬性優先
- 9. 爲什麼我對gwt有依賴性?
- 10. 什麼是依賴屬性?它有什麼用途?
- 11. 爲什麼ViewModel需要實現INotifyPropertyChanged或使用依賴屬性?
- 12. 爲什麼我在依賴項屬性上收到異常?
- 13. 附加的依賴屬性訪問器 - 爲什麼?
- 14. WPF/Silverlight:爲什麼動畫類需要依賴屬性?
- 15. 爲什麼依賴屬性必須是靜態
- 16. 爲什麼我們應該實際使用依賴屬性?
- 17. 依賴屬性重入(或:爲什麼這個工作)
- 18. 爲什麼依賴屬性是「靜態的」?
- 19. Silverlight:爲什麼設計者不能看到依賴屬性?
- 20. 依賴屬性空
- 21. 依賴屬性WPF
- 22. 依賴屬性依賴於另一個
- 23. 不依賴於UserControl的依賴屬性
- 24. 綁定依賴屬性到另一個依賴屬性
- 25. 依賴於其他屬性的依賴屬性
- 26. 屬性更改依賴屬性
- 27. 口譯WPF依賴屬性爲一組
- 28. Math.Round與依賴屬性,怪異行爲
- 29. WPF依賴項屬性爲枚舉集
- 30. 容易依賴項屬性
因此,依賴項屬性的默認值被存儲在哪裏。他們也在消耗記憶力,不是嗎?另外,如果我們改變文本框控件的「Text」dp,那麼改變後的值將只存儲在該對象的Hashtable(特定的文本框)中?如果是這樣的話,那麼默認值+改變了數值......加倍了memory..ufff。讓我知道你的意見,Regards Rakesh www.qtricks.com – 2011-12-03 10:09:25
@Rajesh庫馬爾:默認值存儲靜態。因此,減少的足跡,因爲你只有一個值的所有實例。 – user879355 2012-07-04 08:14:00