覆盖子类中的继承类属性

时间:2012-12-10 18:26:43

标签: c# custom-attributes

对覆盖属性的继承属性有一个很好的question

假设一个属性:

[AttributeUsage(AttributeTargets.All, Inherited = true)]
public class MyAttributeAttribute : Attribute

//...

public class ParentClass
{
    [MyAttribute]
    public String MyString;
}

public class ChildClass : ParentClass
{
    new public String MyString; //Doesn't have MyAttribute
}

但是,如果将MyAttribute设置为类,该怎么办?

[MyAttribute]
public class ParentClass

public class ChildClass; //Don't want MyAttribute

有没有办法让ChildClass不继承属性?


背景:纯粹的理论。我想让一个属性可继承,并想知道,如果案件发生在某一天,如果我可以覆盖它。

1 个答案:

答案 0 :(得分:3)

您可以复制您引用的问题的一个答案中提到的BrowsableAttribute方法。你可以创建一个带有布尔值的构造函数,当设置为false时,它将表示不应该处理属性(尽管存在)。您还可以添加一个无参数构造函数,将属性设置为true。除非您决定覆盖从基类继承的属性,否则这将是您最常使用的那个。

[AttributeUsage(AttributeTargets.All, Inherited = true)]
public class MyAttributeAttribute : Attribute
{
    public bool Enabled { get; private set; }

    public MyAttributeAttribute()
        :this(true)
    {
    }

    public MyAttributeAttribute(bool enabled)
    {
        Enabled = enabled;
    }
}

然后,当您反思您的类型并查找属性时,您可以检查Enabled属性,只有在您确实使用它时才会检查。

您的示例类层次结构将是:

[MyAttribute]
public class ParentClass
[MyAttribute(false)]    
public class ChildClass; //Don't want MyAttribute