继承的属性

本文关键字:属性 继承 | 更新日期: 2023-09-27 18:32:22

>属性代码

[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

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

继承的属性

继承

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

与 http://aclacl.brinkster.net/InsideC/32ch09f.htm 相比查看指定继承属性规则一章

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

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

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

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