- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
MSDN 文档:MemberInfo.GetCustomAttibutes Method (Type, Boolean)备注中指出:
This method ignores the inherit parameter for properties and events. To search the inheritance chain for attributes on properties and events, use the appropriate overloads of the Attribute.GetCustomAttributes method.
这基本上意味着对于事件成员 和属性成员,此实现的第二个参数(bool inherit
)被忽略。但是,调用此操作的 Attribute.GetCustomAttributes(MemberInfo,Type,bool)
变体不会。
令我困惑的是这个的设计。
为什么他们似乎会任意忽略 2 种形式的成员类型的继承属性?
如果有人能阐明这一点,我将不胜感激。
最佳答案
这绝对令人困惑。严格的答案是属性和事件不会被继承,所以 inherited
参数没有意义。引用是 ECMA 335 CLI Specification第 8.10.3 节。
Fundamentally, properties and events are constructs of the metadata intended for use by tools that target the CLI and are not directly supported by the VES itself. Therefore, it is the job of the source language compiler and the reflection library (see Partition IV) to determine rules for name hiding, inheritance, and so forth. The source compiler shall generate CIL that directly accesses the methods named by the events and properties, not the events or properties themselves.
规范没有说明编译器应该如何实现它。在 C# 的情况下,属性是通过单独的 getter 和 setter 方法实现的,这些方法可以声明为 virtual
和 override
。同样,对于事件,有单独的 addhandler 和 removehandler 方法。
所以简单的答案是属性和事件是严格的元数据,没有根据规范进行任何实现。这就是为什么它们不能像方法一样被继承。
关于c# - ICustomAttributeProvider.GetCustomAttributes(...) : Design Strangety?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3103709/
MSDN 文档:MemberInfo.GetCustomAttibutes Method (Type, Boolean)备注中指出: This method ignores the inherit p
为什么 ICustomAttributeProvider.GetCustomAttributes() 返回 object[] 而不是 Attribute[]? 在使用 mscorlib 中的 ICus
我是一名优秀的程序员,十分优秀!