Explanation from .NET document:The Attribute class contains convenience methods to access and test custom attributes. While any user-defined type can be used as an attribute, it is expected that most attributes will be instances of types derived from Attribute.All attributes derive directly or indirectly from class Attribute. Attributes can be applied to any target element (see AttributeTargets); multiple instances of an attribute can be applied to the same target element; and attributes can be inherited by an element derived from a target element. Compilers and other development tools use this information to identify which attributes are custom attributes.Custom attributes can be stored with any element of the metadata. This mechanism can be used to store application-specific information at compile time and access it either at runtime or when another tool reads the metadata..NET Framework predefines some attribute types and uses them to control runtime behavior. Some languages predefine attribute types to represent language features not directly represented in the .NET Framework common type system. Users or other tools are welcome to define and use additional attribute types.Hope it could be help.