What if your program could read its own secret notes and act on them all by itself?
Why Reading attributes with reflection in C Sharp (C#)? - Purpose & Use Cases
Imagine you have many classes in your program, each with special notes or tags written in comments. You want to find these notes and act on them, but you have to open every file and read through all the comments manually.
This manual way is slow and tiring. You might miss some notes or make mistakes copying them. Also, if you add new notes later, you have to repeat the whole process again, wasting time and risking errors.
Using reading attributes with reflection lets your program look at its own classes and find these special notes automatically. It reads the tags directly from the code while running, so you never have to search manually again.
foreach (var type in assembly.GetTypes()) { // Manually check comments or external files for notes }
foreach (var type in assembly.GetTypes()) {
var attrs = type.GetCustomAttributes<MyAttribute>(inherit: false);
// Use attributes directly
}This makes your program smart and flexible, able to adjust behavior based on tags without extra manual work.
For example, in a web app, you can mark certain methods as 'AdminOnly' with an attribute, and reflection can find these to restrict access automatically.
Manual searching for notes is slow and error-prone.
Reflection reads attributes automatically at runtime.
This leads to cleaner, smarter, and easier-to-maintain code.
Practice
Solution
Step 1: Understand what attributes are
Attributes are extra notes or metadata added to code elements like classes or methods.Step 2: Understand reflection's role
Reflection lets you look at these attributes while the program runs, to read their information.Final Answer:
Access extra information added to classes or methods at runtime -> Option AQuick Check:
Reflection reads attributes = Access extra info [OK]
- Thinking reflection changes code instead of reading it
- Confusing attributes with variables or methods
- Believing attributes speed up compilation
Solution
Step 1: Recall the reflection syntax for attributes
In C#, to get attributes of a class, use typeof(ClassName).GetCustomAttributes().Step 2: Check each option
Only typeof(MyClass).GetCustomAttributes() uses the correct syntax with typeof and GetCustomAttributes method.Final Answer:
typeof(MyClass).GetCustomAttributes() -> Option BQuick Check:
Correct syntax uses typeof and GetCustomAttributes() [OK]
- Calling GetAttributes() directly on class name
- Using instance methods instead of typeof
- Confusing method names like Attributes()
[System.Obsolete("Use NewMethod instead")]
class OldClass {}
var attrs = typeof(OldClass).GetCustomAttributes(typeof(System.ObsoleteAttribute), false);
Console.WriteLine(attrs.Length);Solution
Step 1: Identify the attribute applied
The class OldClass has the Obsolete attribute applied once.Step 2: Check GetCustomAttributes call
GetCustomAttributes is called with ObsoleteAttribute type, so it returns an array with that attribute instance.Final Answer:
1 -> Option DQuick Check:
One Obsolete attribute found = 1 [OK]
- Assuming zero because attribute is ignored
- Expecting null instead of empty array
- Thinking it throws exception without reason
class MyClass {}
var attrs = MyClass.GetCustomAttributes();
Console.WriteLine(attrs.Length);Solution
Step 1: Check method call on class
GetCustomAttributes is a method of Type, not the class itself, so calling MyClass.GetCustomAttributes() is invalid.Step 2: Correct usage
You must use typeof(MyClass).GetCustomAttributes() to get attributes via reflection.Final Answer:
GetCustomAttributes is not a method of the class itself -> Option CQuick Check:
Use typeof(Class).GetCustomAttributes() not Class.GetCustomAttributes() [OK]
- Calling GetCustomAttributes directly on class name
- Ignoring that GetCustomAttributes is a Type method
- Assuming attributes exist without checking
InfoAttribute applied to multiple methods in a class and print their descriptions. Which approach correctly reads and prints these descriptions?Solution
Step 1: Identify target elements
The attribute InfoAttribute is applied to methods, so we must get methods via reflection.Step 2: Read attributes per method
For each MethodInfo, call GetCustomAttributes with InfoAttribute type to get the attribute instance and access its Description property.Step 3: Print descriptions
Print the Description property for each method's attribute found.Final Answer:
Use reflection to get MethodInfo array, then for each method call GetCustomAttributes(typeof(InfoAttribute), false) and print the Description property -> Option AQuick Check:
Read attributes per method, not class or fields [OK]
- Reading attributes only on class instead of methods
- Checking fields instead of methods
- Assuming one attribute for whole class
Ready to prove it?
Pass the test and this pattern moves unknown
