6

属性代码

[AttributeUsage(AttributeTargets.Property, Inherited = true)]
class IgnoreAttribute : Attribute
{
}

基类

abstract class ManagementUnit
{
    [Ignore]
    public abstract byte UnitType { get; }
}

主班

class Region : ManagementUnit
{
    public override byte UnitType
    {
        get { return 0; }
    }

    private static void Main()
    {
        Type t = typeof(Region);
        foreach (PropertyInfo p in t.GetProperties())
        {
            if (p.GetCustomAttributes(typeof(IgnoreAttribute), true).Length != 0)
                Console.WriteLine("have attr");
            else
                Console.WriteLine("don't have attr");
        }
    }
}

输出: don't have attr

解释为什么会这样?毕竟,它必须继承。

4

2 回答 2

5

继承标志指示属性是否可以被继承。此值的默认值为 false。但是,如果继承标志设置为 true,则其含义取决于 AllowMultiple 标志的值。如果继承的标志设置为 true 并且 AllowMultiple 标志为 false,则该属性将覆盖继承的属性。但是,如果继承标志设置为 true 并且 AllowMultiple 标志也设置为 true,则该属性会在成员上累积。

来自http://aclacl.brinkster.net/InsideC/32ch09f.htm 检查指定继承属性规则一章

编辑:检查抽象属性上自定义属性的继承 第一个答案:

GetCustomAttributes() 方法不查看父声明。它只查看应用于指定成员的属性。

于 2012-04-27T09:34:28.320 回答
1

PropertyInfo.GetCustomAttributes 中的继承标志对于属性和事件都被忽略,如下所述:https ://msdn.microsoft.com/en-us/library/dwc6ew1d.aspx 。但是您可以使用 Attribute.GetCustomAttributes 重载之一来启用属性(或事件)的继承。

此问题在以下位置进行了更详细的讨论:http: //blog.seancarpenter.net/2012/12/15/getcustomattributes-and-overridden-properties/

于 2015-08-24T09:34:35.487 回答