继承属性

tur*_*off 6 .net c# inheritance attributes

属性代码

[AttributeUsage(AttributeTargets.Property, Inherited = true)]
class IgnoreAttribute : Attribute
{
}
Run Code Online (Sandbox Code Playgroud)

基类

abstract class ManagementUnit
{
    [Ignore]
    public abstract byte UnitType { get; }
}
Run Code Online (Sandbox Code Playgroud)

主要课程

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");
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

输出: don't have attr

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

ama*_*ers 5

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

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

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

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

  • 不,"inherited"的默认值为true.https://msdn.microsoft.com/en-us/library/system.attributeusageattribute.inherited(v=vs.110).aspx (3认同)