Reflection cho phép chương trình kiểm tra và thao tác metadata của kiểu lúc runtime: đọc danh sách type, method, property, attribute; tạo instance động; gọi method mà không cần biết kiểu lúc biên dịch.
Type t = typeof(User);
object? u = Activator.CreateInstance(t); // tạo instance động
PropertyInfo? p = t.GetProperty("Name");
p?.SetValue(u, "Định"); // gán giá trị qua metadataKhi nào dùng (bản chất là framework):
- Serializer (System.Text.Json), ORM (EF Core) đọc property để map dữ liệu.
- DI container tự tìm và khởi tạo dependency.
- Test framework/plugin quét attribute ([Fact], [Test]) để phát hiện method.
Đánh đổi:
- Chậm hơn gọi trực tiếp (bỏ qua tối ưu JIT) → cache MemberInfo nếu gọi nhiều.
- Mất an toàn kiểu lúc biên dịch — lỗi dồn về runtime.
- Gây khó cho trimming/AOT vì compiler không thấy phần gọi động.
Trong .NET hiện đại, ưu tiên source generators khi có thể để đạt kết quả tương tự mà không trả giá runtime.