Throughout this book, I have emphasized that a .NET application contains code, data, and metadata. Metadata is information about the datathat is, information about the types, code, assembly, and so forthstored along with your program. This chapter explores how some of that metadata is created and used.
Attributes are a mechanism for adding metadata, such as compiler instructions and other data about your data, methods, and classes, to the program itself. Attributes are inserted into the metadata and are visible through ILDasm and other metadata-reading tools.
Reflection is the process by which a program can read its own metadata. A program is said to reflect on itself, extracting metadata from its assembly and using that metadata either to inform the user or to modify its own behavior.