[AttributeUsage( AttributeTargets.Method, Inherited = true, AllowMultiple = false )]
class TestAttribute : Attribute { }
[AttributeUsage( AttributeTargets.Method, Inherited = false, AllowMultiple = false )]
class NonInheritAttribute : Attribute { }
public virtual void PerformAction()
Console.WriteLine( "Action!" );
public virtual void NonInherited()
public class DerivedClass : BaseClass
public override void PerformAction()
Console.WriteLine( "Combine actions!" );
public override void NonInherited()
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 );
mdx.Invoke(baseInstance, null);
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 );
mdx.Invoke(derivedInstance, null);