Marty Trenouth Marty Trenouth - 5 months ago 32
C# Question

Inheritance of Custom Attributes on Abstract Properties

I've got a custom attribute that I want to apply to my base abstract class so that I can skip elements that don't need to be viewed by the user when displaying the item in HTML. It seems that the properties overriding the base class are not inheriting the attributes.

Does overriding base properties (abstract or virtual) blow away attributes placed on the original property?

From Attribute class Defination

Inherited = true,
AllowMultiple = false)]
public class NoHtmlOutput : Attribute

From Abstract Class Defination

public abstract Guid UniqueID { get; set; }

From Concrete Class Defination

public override Guid UniqueID{ get{ return MasterId;} set{MasterId = value;}}

From class checking for attribute

Type t = o.GetType();
foreach (PropertyInfo pi in t.GetProperties())
if (pi.GetCustomAttributes(typeof(NoHtmlOutput), true).Length == 1)
// processing logic goes here


No, attributes are inherited.

It's the GetCustomAttributes() method that does not look at parent declarations. It only looks at attributes applied to the specified member. From the docs:


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.