微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

asp.net-mvc – 为什么System.ComponentModel.DataAnnotations.DisplayAttribute已密封?

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

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

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

解决方法

通常,密封属性被认为是最佳实践. Fxcop一个关于它的规则,defined here.从那个页面

The .NET Framework class library provides methods for retrieving custom attributes. By default,these methods search the attribute inheritance hierarchy; for example Attribute.GetCustomAttribute searches for the specified attribute type,or any attribute type that extends the specified attribute type. Sealing the attribute eliminates the search through the inheritance hierarchy,and can improve performance.

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐