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 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.