2011-04-10 102 views
10

爲什麼依賴屬性是靜態的,這個問題仍然在我心中很清楚,我就是爲什麼我們需要使用只讀關鍵字屬地財產申報的時間。爲什麼依賴屬性被聲明爲靜態只讀?

+0

只是看看這個http://stackoverflow.com/questions/2989431/why-dependency-properties-are-static – 2011-04-11 04:09:46

回答

3

從概念上講,依賴項屬性是依賴項對象只是具有的內容,而不依賴於何時使用該屬性。就像一個CLR屬性,如果你問這是否對象有Total屬性,你就知道它不能是現在double而是int以後。因此,如果可以的話,我們將依賴項屬性const,但我們不能,所以readonly是次好的。

使用readonly關鍵字至少有三個作用:

  • 它通知碼的讀者,價值不會改變
  • 它可以防止筆者意外更改
  • 它協助價值編譯器,它知道什麼時候事情不會改變
+0

是的,理解。但是如果我聲明它不是隻讀的,並且出於某種原因我想在運行時動態地更改此屬性,那麼可能嗎?或者對於這種情況有更好的解決方案? – zinking 2013-06-21 10:27:18

1

因爲它使明顯,這個屬性的值初始化後不能更改。

1

希望這將有助於:Silverlight.net forums: DependencyProperty - public static readonly?

引述:

「公共靜態只讀」是來自注冊回調領域。該字段是屬性的標識符。你只需要標識符,這樣Silverlight屬性系統就知道該怎麼做,並且可以在定義依賴屬性的CLR「包裝器」時自己使用屬性系統。一旦你有了包裝,該物業的所有進一步使用可以像典型的財產一樣使用它。

公共使所有財產的系統調用,包括跨組件能夠訪問它。

靜態和只讀的,因爲這不是應該永遠改變的定義;房產系統需要獲得一致的結果。

在附加屬性的情況下,你想有是一個「老闆」級。所有者類必須是調用RegisterAttached的類,並且還必須定義靜態訪問器方法(Get *和Set *),以便當您嘗試在DependencyObject實例上設置附加屬性時,XAML分析器知道該做什麼。所以它有點不同,因爲對於附加屬性,通常不是「包裝」,任何代碼訪問都只使用Get *和Set *訪問器。

相關問題