This is the base class for all custom attributes. Attributes are the .NET programmer’s means of inserting additional metadata into a type’s definition. For example, the .NET Serialization mechanism uses an attribute to indicate which fields in a type should not be serialized (see the System.Reflection.FieldAttributes.NotSerialized enumeration value). .NET programmers are free to create their own attributes (called custom attributes, although from a certain perspective all attributes are inherently custom) by creating a new type that claims Attribute as its base class type.

By themselves, attributes offer no modification to a type’s behavioral semantics; that is, attributes don’t modify the type’s methods or execution in any way. In fact, attribute instances aren’t even created until they are retrieved out of the type’s metadata via the Reflection APIs. The entire purpose of an attribute is to act as a marker inside the type’s metadata for consumption by some other API, library, or facility. For example, the Serialization APIs in the .NET Framework Class Library use the Serializable attribute to indicate which types are serializable. However, by themselves, the attributes carry no code to perform the actual act of serialization. This must be done by passing the instance of the type into instances of the Serialization classes, in which the attribute is retrieved and examined, and “appropriate” action is taken.

Attributes can be attached to any metadata component ...

Get C# in a Nutshell, Second Edition now with O’Reilly online learning.

O’Reilly members experience live online training, plus books, videos, and digital content from 200+ publishers.