This article discusses attributes and reflection concepts in detail with examples wherever necessary. C# is very important language, but it also offers scope for adding declarative features to the code and their later retrieval if necessary. We can use attributes to provide both design-level and run-time information to our code. Attributes are a mechanism for adding metadata. Reflection is the process by which a program can read its own metadata.