Nói sơ qua
Reflection là các class trong namespace System.Reflection, nó cùng với các class trong namespace System.Type giúp mình xác định được các thông tin từ các assemblies(thông thường là các file *.dll) và các loại thông tin như là Class, Interface, Value Types(các loại giá trị). Chúng ta có thể sử dụng reflection để tạo ra một instances(Có thể gọi là một thể hiện của Object ) để gọi và cập nhật đến chúng.
Common language runtime(CLR) sẻ quản lý việc tải các application domains để tạo thành một ranh giới xung quanh các đối tượng đó. Có nghĩa là CLR sẻ quản lý việc tải mỗi assembly vào trong các application domains thích hợp và điều khiển việc bố trí bộ nhớ cho từng loại.
Assemblies thì chứa các modules, các modules thì chứa các Types, và Types thì chứa các thành phần ở trong đó. Reflection thì cung cấp cho các objects để đóng gói các assemblies, modules và các types(System.Type). Bạn có thê sử dụng reflaction để tạo động một Instance(thể hiện) của type và bind(kết nó vào, gắn vào) một object đã tồn tại, hoặc lấy ngược ra từ một object đã tồn tại. Bạn có thể triệu gọi các phương thức của types đó hoặc cập nhật đến các fields và các thuộc tính. Các đặc điểm của reflection là:
1) Assembly dùng để xác định và tải các assemblies, các modules trong assembly. Xác định loại cho assembly và tạo instance(thể hiện) của nó.
2) Module được dùng để biết được các thông tin như là assembly này chứa module và các class trong module. Bạn cũng có thể lấy hết tất cả các phương thức toàn cục, không toàn cục hoặc các thành phần khác trên module.
3) ConstructorInfo đươc dùng để biết được các thông tin như name(tên), parameters(thông số), các đặc tính(public, private…) và chi tiết về cách thực hiện(abstract, virtual) của các phương thức(methods). Sử dụng phương thức GetMethods hoặc GetMethod để gọi các phương thức này
4) FieldInfo được dùng để biết được các thông tin như name(tên), các đặc tính(public, private…) và chi tiết về cách thực hiện(như là static) của field, các get,set của field đó.
5) EventInfo được dùng để biết được các thông tin như name(tên),event-handler(sự kiện), các thuộc tính tuỳ chỉnh, các loại khai báo, các thể hiện của sự kiện, thêm hoặc xoá sự kiện.
6) PropertyInfo được dùng để biết được các thông tin như name(tên), loại dữ liệu, trang thái của thuộc tính đó như là (read-only hay writable). get, set các giá trị của thuộc tính đó.
7) ParameterInfo được dùng để biết được các thông tin như name(tên), loại dữ liệu, các thông số nhập vào và trả về, vị trí của thông số trong phương thức đó.
8) CustomAttributeData được dùng để biết được các thông tin các thuộc tính tuỳ chỉnh khi làm việc trong reflection-only context của application domain.