获取覆盖属性的属性时有不同的行为吗?

发布于 2025-01-06 22:56:37 字数 894 浏览 0 评论 0原文

using System;

class Program
{
    static void Main()
    {
        var p = typeof(MyClass2).GetProperty("Value");
        var a = Attribute.GetCustomAttribute(p, typeof(ObsoleteAttribute), true);
        Console.WriteLine(a != null);
    }
}

public class MyClass
{
    [CommandProperty()]
    public virtual string Value { get; set; }
}

public class MyClass2 : MyClass
{
    public override string Value { get; set; }
}

[AttributeUsage( AttributeTargets.Property, Inherited = true)]
public class CommandPropertyAttribute : Attribute
{
/* ... */
}

PropertyInfo prop = ***The PropertyInfo of MyClass2.Value***;
object[] attrs = prop.GetCustomAttributes( typeofCPA, true );
Attribute at =Attribute.GetCustomAttribute(prop, typeofCPA, true);
if (attrs.Length == 0 && at != null)
{
    // Yes this happens.        
}

为什么第一次 GetCustomAttributes 调用没有得到结果?

using System;

class Program
{
    static void Main()
    {
        var p = typeof(MyClass2).GetProperty("Value");
        var a = Attribute.GetCustomAttribute(p, typeof(ObsoleteAttribute), true);
        Console.WriteLine(a != null);
    }
}

public class MyClass
{
    [CommandProperty()]
    public virtual string Value { get; set; }
}

public class MyClass2 : MyClass
{
    public override string Value { get; set; }
}

[AttributeUsage( AttributeTargets.Property, Inherited = true)]
public class CommandPropertyAttribute : Attribute
{
/* ... */
}

PropertyInfo prop = ***The PropertyInfo of MyClass2.Value***;
object[] attrs = prop.GetCustomAttributes( typeofCPA, true );
Attribute at =Attribute.GetCustomAttribute(prop, typeofCPA, true);
if (attrs.Length == 0 && at != null)
{
    // Yes this happens.        
}

Why do I get no result from the first GetCustomAttributes call?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

北风几吹夏 2025-01-13 22:56:37

MemberInfo.GetCustomAttributes 文档(继承到 PropertyInfo)指出;

此方法忽略属性和事件的继承参数。
在继承链中搜索属性和属性的属性
事件,使用适当的重载
Attribute.GetCustomAttributes 方法。

换句话说,(错误的)行为是设计造成的。

The documentation for MemberInfo.GetCustomAttributes (inherited to PropertyInfo) states;

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.

In other words, (wrong) behavior by design.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文