Reflection lets a program look at and use information about itself while it runs. This helps when you want to work with code parts you don't know about until the program is running.
You want to find out what methods or properties a class has without opening its code.
You need to create objects or call methods dynamically based on user input or configuration.
You want to build tools that inspect or modify other programs, like debuggers or serializers.
You want to load and use plugins or modules that are added after your program is built.
Syntax
C Sharp (C#)
Type type = typeof(ClassName);
MethodInfo method = type.GetMethod("MethodName");
object result = method.Invoke(instance, parameters);
Use typeof(ClassName) to get information about a class.
Use GetMethod or similar methods to find specific members.
Examples
This gets the type information for the string class and prints its full name.
C Sharp (C#)
Type type = typeof(string);
Console.WriteLine(type.FullName);
This finds the WriteLine method of Console that takes a string and calls it to print a message.
C Sharp (C#)
MethodInfo method = typeof(Console).GetMethod("WriteLine", new Type[] { typeof(string) });
method.Invoke(null, new object[] { "Hello Reflection!" });
Sample Program
This program uses reflection to get the DateTime type, find its ToLongDateString method, and call it on the current date to print a long date format.
C Sharp (C#)
using System;
using System.Reflection;
class Program
{
staticvoid Main()
{
Type type = typeof(DateTime);
Console.WriteLine($"Type: {type.FullName}");
MethodInfo method = type.GetMethod("ToLongDateString");
DateTime now = DateTime.Now;
string result = (string)method.Invoke(now, null);
Console.WriteLine($"Long date string: {result}");
}
}
OutputSuccess
Important Notes
Reflection can slow down your program if used too much because it works at runtime.
Use reflection carefully to avoid security risks, especially when running code from unknown sources.
Summary
Reflection helps programs learn about and use their own parts while running.
It is useful for dynamic behavior like loading plugins or inspecting unknown types.
Use reflection wisely because it can affect performance and security.
Practice
(1/5)
1. Why do programmers use reflection in C#?
easy
A. To manage memory manually
B. To write faster code by avoiding loops
C. To examine and use information about types at runtime
D. To create graphical user interfaces
Solution
Step 1: Understand what reflection does
Reflection allows a program to look at its own structure, like classes and methods, while it is running.
Step 2: Identify the purpose of reflection
It is used to examine and interact with types dynamically, not for speed or UI creation.
Final Answer:
To examine and use information about types at runtime -> Option C
Quick Check:
Reflection = runtime type info [OK]
Hint: Reflection inspects types during program run [OK]
Common Mistakes:
Confusing reflection with UI design
Thinking reflection speeds up code
Believing reflection manages memory
2. Which of the following is the correct way to get the type of an object obj using reflection in C#?
easy
A. Type t = obj.GetType();
B. Type t = GetType(obj);
C. Type t = typeof(obj);
D. Type t = obj.Type();
Solution
Step 1: Recall the method to get an object's type
In C#, the method GetType() is called on the object instance to get its type.
Step 2: Check each option's syntax
Type t = obj.GetType(); uses obj.GetType(), which is correct. Type t = GetType(obj); and D are invalid syntax. Type t = typeof(obj); uses typeof incorrectly because it expects a type name, not an object.
Final Answer:
Type t = obj.GetType(); -> Option A
Quick Check:
obj.GetType() gets type [OK]
Hint: Use obj.GetType() to get runtime type [OK]
Common Mistakes:
Using typeof with an object instance
Calling non-existent methods like obj.Type()
Trying to pass object to GetType as argument
3. What will be the output of this C# code?
using System;
class Program {
static void Main() {
var type = typeof(string);
Console.WriteLine(type.Name);
}
}
medium
A. string
B. String
C. System.String
D. Type
Solution
Step 1: Understand typeof operator
typeof(string) returns the Type object for the string class.
Step 2: Check what type.Name returns
The Name property returns the class name without namespace, which is "String" with capital S.
Final Answer:
String -> Option B
Quick Check:
typeof(string).Name = "String" [OK]
Hint: typeof(T).Name returns class name without namespace [OK]
Common Mistakes:
Confusing lowercase 'string' keyword with class name
Expecting full namespace in Name property
Thinking output is 'Type'
4. Identify the error in this reflection code snippet:
Type t = typeof(int);
var method = t.GetMethod("Parse");
int result = method.Invoke(null, new object[] { "123" });
Console.WriteLine(result);
medium
A. Invoke returns object, needs casting to int
B. GetMethod("Parse") does not exist on int
C. typeof(int) should be typeof(Int32)
D. Invoke cannot be called with null as first argument
Solution
Step 1: Check method retrieval
int (System.Int32) has a static method "Parse", so GetMethod("Parse") works.
Step 2: Check Invoke return type and usage
Invoke returns an object. Assigning it directly to int causes a compile error. It needs explicit cast: (int)method.Invoke(...).
Final Answer:
Invoke returns object, needs casting to int -> Option A
Quick Check:
Invoke returns object, cast needed [OK]
Hint: Cast Invoke result to correct type [OK]
Common Mistakes:
Ignoring cast from object to int
Thinking GetMethod("Parse") is invalid
Assuming typeof(int) is wrong
5. You want to load a plugin assembly at runtime and call its method Run without knowing the class name beforehand. Which reflection approach is best?
hard
A. Call Run method without loading assembly
B. Use typeof() with class name, then call Run directly
C. Use new operator with class name string
D. Use Assembly.Load, then find type with GetTypes(), then invoke Run method
Solution
Step 1: Understand dynamic plugin loading
When class name is unknown, you must load assembly dynamically and inspect types.
Step 2: Use reflection to find and invoke method
Assembly.Load loads the plugin. GetTypes() lists classes. Then you find the class with Run method and invoke it.
Final Answer:
Use Assembly.Load, then find type with GetTypes(), then invoke Run method -> Option D