【问题标题】:Attribute.IsDefined vs MemberInfo.IsDefined - difference of the inherited parameterAttribute.IsDefined vs MemberInfo.IsDefined - 继承参数的区别
【发布时间】:2016-11-28 16:17:56
【问题描述】:

我的问题涉及检查属性的继承属性。

this Question 中描述的Attribute.IsDefined(MemberInfo, Type, Boolean) (1)MemberInfo.IsDefined(Type, Boolean) (2) 方法基本相同。两者都在检查是否使用了属性。但是如果我想检查一个属性,inherit 参数有很大的不同:

(1):

如果为 true,则指定还搜索元素的祖先以查找自定义属性。

(2):

true 搜索此成员的继承链以查找属性;否则为 false。属性和事件忽略此参数;见备注。

(备注只推荐(1)的用法)

使用(1) 来获取属性的继承属性是没有问题的。但我的问题是为什么:为什么这个功能是这样实现的?原因、用途或好处是什么?从我的观点来看,有一种方法会忽略参数,这并不是一个真正干净的解决方案。

我是不是忽略了什么?

【问题讨论】:

    标签: c# .net inheritance properties attributes


    【解决方案1】:

    我的猜测(它不再是猜测) - 原因是向后兼容性。

    PropertyInfo.IsDefinedEventInfo.IsDefined 忽略了 inherit 参数,因为它们是在 .NET 1.0 中引入的。 Attribute 上的静态方法是在 .NET 2.0 中引入的,并经过修改以支持属性和事件的继承。如果他们要改变这种行为,将 inherit 设置为 true 的旧代码可能会开始获得意外的属性。

    只是 BCL 中的许多不一致之处之一...... :)

    【讨论】:

      猜你喜欢
      • 2013-09-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-26
      相关资源
      最近更新 更多