[AttributeUsage( AttributeTargets.Method, Inherited = true, AllowMultiple = false )]
class TestAttribute : Attribute { }
protected virtual void PerformAction()
Console.WriteLine( "Action!" );
public class DerivedClass : BaseClass
protected override void PerformAction()
Console.WriteLine( "Combine actions!" );
public class TestAttributeUsage
public static void Main()
BaseClass baseInstance = new BaseClass();
DerivedClass derivedInstance = new DerivedClass();
Console.WriteLine( "Attributes on Base Class Methods:" );
MethodInfo[] methods = baseInstance.GetType().GetMethods( BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance );
foreach ( MethodInfo mdx in methods )
object[] attribs = mdx.GetCustomAttributes( true );
foreach ( Attribute attr in attribs )
Console.WriteLine( attr );
Console.WriteLine( string.Empty );
Console.WriteLine( "Attributes on Derived Class Methods:" );
methods = derivedInstance.GetType().GetMethods( BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance );
foreach ( MethodInfo mdx in methods )
object[] attribs = mdx.GetCustomAttributes( true );
foreach ( Attribute attr in attribs )
Console.WriteLine( attr );