gpt4 book ai didi

c# - Attribute.IsDefined 与 MemberInfo.IsDefined - 继承参数的区别

转载 作者:太空宇宙 更新时间:2023-11-03 21:09:37 25 4
gpt4 key购买 nike

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

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

(1):

If true, specifies to also search the ancestors of element for custom attributes.

(2):

true to search this member's inheritance chain to find the attributes; otherwise, false.This parameter is ignored for properties and events; see Remarks.

(备注只推荐使用(1))

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

我是不是忽略了什么?

最佳答案

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

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

只是 BCL 中众多不一致的地方之一……:)

关于c# - Attribute.IsDefined 与 MemberInfo.IsDefined - 继承参数的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38565778/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com