C# provides a mechanism for defining declarative tags, called attributes, which you can place on certain entities in your source code to specify additional information. The information that attributes contain can be retrieved at run time through reflection. You can use predefined attributes or you can define your own custom attributes. This section provides a general introduction to attributes in C#; for more detailed information, refer to CLR 17 Attributes.
C# Attributes | CLR 17 Attributes | Attributes Tutorial