回答
這裏的奇妙之處在於,DependencyProperty
的聲明是static
而不是它的value
(即存儲器存儲)。您使用static
關鍵字添加的聲明僅僅是DependencyObject
的DependencyProperty
的標識符,因爲相同的標識符將由該DependencyObject的所有實例共享以標識該屬性,因此將其設置爲static
是有意義的。
在另一方面,當你調用SetValue
上DependancyObject
實例上設置的DependancyProperty
的值,然後在其上調用setValue的DependancyObject
每個實例都將存儲屬性的本地值。這是由DependancyObject
類保持排序的Dictionary
其具有DependancyProperty
標識符和局部值之間的映射內部處理。
的DependencyProperty必須是靜態(類級別),因爲當我們創建具有該屬性的類的多個對象,並想引用該屬性的值必須來自的DependencyProperty的靜態實例的默認值。因此,我們類的所有實例的默認值都是相同的,系統不會爲該類的每個實例的DependencyProperty保留內存。 這樣可以減少內存佔用。
現在,下一個問題出現,如果我們明確地設置的DependencyProperty的值類的對象。(代碼或動畫或樣式)
在這種情況下的DependencyObject進入圖片。任何具有DependencyProperty的類都必須從DependencyObject類(WPF特定類派生,該類維護名爲EffectiveValues的集合)。當用戶在類的對象上(通過代碼或動畫或樣式)將DependencyProperty的值明確設置爲該值時,該值將存儲在駐留在DependencyObject類內的那個EffectiveValues集合中,並在那裏保留內存。
很好的回答;然而,DependencyObject不是WPF特定的類 - 它也可以在Silverlight和WinRT中使用。 –
- 1. 目標屬性必須是依賴屬性 - 爲什麼?
- 2. 爲什麼依賴屬性是「靜態的」?
- 3. 爲什麼依賴屬性被聲明爲靜態只讀?
- 4. 爲什麼依賴屬性?
- 5. 非靜態依賴項屬性
- 6. 什麼是WPF中的依賴屬性
- 7. 爲什麼ClassInitialize方法必須是靜態的?
- 8. 爲什麼委託必須是靜態的?
- 9. 爲什麼operator()[] - > =必須是非靜態成員?
- 10. 爲什麼C#運算符重載必須是靜態的?
- 11. 爲什麼.Net WPF DependencyProperties必須是類的靜態成員
- 12. 爲什麼數據庫名稱必須是靜態的?
- 13. 拋出一個異常,爲什麼它必須是靜態的?
- 14. 爲什麼私有靜態屬性爲
- 15. 什麼是「TemplatedParent模板屬性」依賴項屬性優先
- 16. KindError:屬性r必須是SecondModel的實例,爲什麼?
- 17. 是否有可能擁有共享/靜態依賴屬性?
- 18. 爲什麼jsp中的EL函數必須聲明爲靜態?
- 19. 必須設置WPF UserControl的依賴項屬性的警報?
- 20. 必須不同的兩個UserControl依賴項屬性
- 21. 什麼是依賴屬性?它有什麼用途?
- 22. 爲什麼我必須把這個功能靜態
- 23. 爲什麼靜態成員必須在main()之外初始化?
- 24. 解決BeautifulSoup依賴性時,「TypeError:dist必須是分發實例」
- 25. ListView.View是依賴屬性
- 26. 依賴屬性
- 27. 依賴屬性
- 28. 註冊屬性作爲依賴屬性
- 29. 爲什麼Main必須是靜態的才能接受命令行參數?
- 30. 爲什麼const類成員必須是靜態的才能正確優化?
[非靜態依賴屬性]的可能的重複(http://stackoverflow.com/questions/3660696/non-static-dependency-properties) –
在上述問題的答案的解釋是相當基本的,請閱讀基礎知識後,我們可以辯論約束條件是否有效。 –
@ M.Babcock:這就是我在描述中所說的,我已經看到了幾個解釋但並不全面。我已經看到你在這裏寫我的問題之前給的鏈接,並且,還有我也看到了這一點http://stackoverflow.com/questions/2989431/why-are-dependency-properties-static – Learner