为什么System.ComponentModel.DataAnnotations.DisplayAttribute已密封?

Jer*_*ose 3 asp.net-mvc data-annotations asp.net-mvc-3

我打算实现一个自定义DisplayAttribute,以允许基于模型值的动态显示值,但我不能因为DisplayAttribute是密封的.

在我开始编写我自己的客户属性来模仿其行为之前DisplayAttribute,有人能想到为什么这个被密封了吗?我假设它背后有一个原因,如果是这样,那可能是我不应该试图通过滚动我自己"破解"这个限制的原因.

我不是要求任何人阅读微软的想法,我只是希望有人已经知道密封的设计理由,以便在滚动(或避免)我自己的实现时考虑到这一点.

bha*_*lin 7

通常,密封属性被认为是最佳实践.FxCop有一个关于它的规则,在这里定义.从该页面:

.NET Framework类库提供了检索自定义属性的方法.默认情况下,这些方法搜索属性继承层次结构; 例如,Attribute.GetCustomAttribute搜索指定的属性类型或扩展指定属性类型的任何属性类型.密封属性消除了通过继承层次结构的搜索,并且可以提高性能.

许多MVC属性(ActionFilter等)都是未密封的,因为它们是专门为扩展而设计的,但DataAnnotations命名空间中的元素却没有.