2012-02-22 38 views
3

我打算實施一個自定義DisplayAttribute以便允許基於模型值的動態顯示值,但是我不能,因爲DisplayAttribute是密封的。爲什麼密封System.ComponentModel.DataAnnotations.DisplayAttribute?

在我離開前編寫自己的客戶屬性來模擬DisplayAttribute的行爲之前,有人可以想到爲什麼這是密封的嗎?我假設背後有一個原因,如果是這樣的話,那可能是我不應該通過滾動我自己來「繞過」這個限制的相同原因。

我沒有要求任何人閱讀微軟的想法,我只是希望有人知道它的封裝設計原因,以便在滾動(或避免)我自己的實現時考慮到這一點。

回答

7

一般認爲最好的做法是將屬性加蓋。 FxCop有一條規則,defined here。從該頁開始:

.NET Framework類庫提供了用於檢索自定義屬性的方法。默認情況下,這些方法搜索屬性繼承層次結構;例如Attribute.GetCustomAttribute搜索指定的屬性類型,或者擴展指定的屬性類型的任何屬性類型。密封該屬性將消除繼承層次結構中的搜索,並可提高性能。

許多MVC的屬性(ActionFilter,等)的未密封,因爲它們是專門設計來進行擴展,但在DataAnnotations命名空間的元素都沒有。

相關問題