Skip to main content

Documentation Index

Fetch the complete documentation index at: https://docs.syntblaze.com/llms.txt

Use this file to discover all available pages before exploring further.

The AttributeUsage attribute is a meta-attribute in C# used to define the application constraints and behaviors of a custom attribute class. Applied directly to a class inheriting from System.Attribute, it dictates the syntactic program elements to which the custom attribute can be attached, whether it can be applied multiple times to the same element, and whether derived classes inherit the attribute.
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = true, Inherited = false)]
public class MyCustomAttribute : Attribute
{
    // Attribute implementation
}
The AttributeUsage attribute is instantiated using one positional parameter and two optional named parameters.

ValidOn (Positional Parameter)

The first parameter is mandatory and maps to the ValidOn property. It defines the specific C# elements (such as classes, methods, properties, or assemblies) where the custom attribute is legally allowed to be placed.
  • Type: System.AttributeTargets
  • Mechanics: AttributeTargets is a flags enumeration. You can specify a single target (e.g., AttributeTargets.Class) or combine multiple targets using the bitwise OR operator (|). To allow the attribute on any valid element, use AttributeTargets.All.
  • Compilation: If a developer attempts to apply the custom attribute to a program element not specified in the ValidOn parameter, the C# compiler will generate error CS0592.

AllowMultiple (Named Parameter)

This property determines whether more than one instance of your custom attribute can be applied to a single program element.
  • Type: bool
  • Default Value: false
  • Mechanics: When set to false, applying the attribute multiple times to the same target results in compiler error CS0579 (“Duplicate ‘AttributeName’ attribute”). When set to true, the compiler permits stacking multiple instances of the attribute on the same target, which is typically parsed at runtime via reflection using MemberInfo.GetCustomAttributes.

Inherited (Named Parameter)

This property controls the inheritance semantics of the custom attribute across class hierarchies and overridden members.
  • Type: bool
  • Default Value: true
  • Mechanics:
    • When set to true, if the custom attribute is applied to a base class, any class deriving from that base class will automatically possess the attribute. Similarly, it applies to overridden virtual methods and properties.
    • When set to false, the attribute is strictly bound to the specific type or member it is applied to and does not flow down the inheritance chain.
    • Note: This property only affects runtime reflection behavior (specifically when passing inherit: true to reflection methods like Type.GetCustomAttributes). It does not cause the attribute to physically appear in the derived class’s metadata within the compiled IL.
Master C# with Deep Grasping Methodology!Learn More