Predefined Attributes
The .NET Framework makes extensive use of attributes for purposes ranging from simple documentation to advanced support for threading, remoting, serialization, and COM interop. These attributes are all defined in the FCL, and can be used, extended, and retrieved by your own code.
However, certain attributes are treated specially by the compiler and
the runtime. Three attributes considered general enough to be defined
in the C# specification are AttributeUsage
,
Conditional
, and Obsolete
.
Other attributes, such as CLSCompliant
,
Serializable
, and
NonSerialized
, are also treated specially.
The AttributeUsage Attribute
[AttributeUsage(target-enum [, AllowMultiple=[true|false]]? [, Inherited=[true|false]]? ] (for classes)
The AttributeUsage
attribute is applied to a new
attribute class declaration. It controls how the new attribute should
be treated by the compiler—specifically, which set of targets
(classes, interfaces, properties, methods, parameters, etc.) the new
attribute can be specified on. This is true whether multiple
instances of this attribute may be applied to the same target, and
whether this attribute propagates to subtypes of the target.
target-enum
is a bitwise mask of values
from the System.AttributeTargets
enum, which looks
like this:
namespace System { [Flags] public enum AttributeTargets { Assembly = 0x0001, Module = 0x0002, Class = 0x0004, Struct = 0x0008, Enum = 0x0010, Constructor = 0x0020, Method = 0x0040, Property = 0x0080, Field = 0x0100, Event ...
Get C# in a Nutshell, Second Edition now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.