Đỉnh NGUYỄN

life's a journey not a destination

Reflection (C# Programming Guide)

Leave a comment


Reflection cung cấp đối tượng (thuộc kiểu Type), mô tả assemblies, modules và types. Dùng reflection tạo động 1 thể hiện của Type, lấy Type từ đối tượng đã tồn tại và triệu gọi các phương thức hoặc truy cập các thuộc tính. Nếu có dùng thuộc tính trong mã, reflection cho phép truy cập chúng. (Reflection class cung cấp các phương thức đọc assembly meta data cho hộp thoại About là ví dụ điển hình). Thông tin xem thêm Attributes (C# Programming Guide).

Một ví dụ reflection dùng phương thức static GetType – được kế thừa từ lớp Object

// Using GetType to obtain type information:
int i = 42;
System.Type type = i.GetType();
System.Console.WriteLine(type);

Dữ liệu xuất:

System.Int32

Một ví dụ, reflection lấy fullname của 1 assembly được load.

// Using Reflection to get information from an Assembly:
System.Reflection.Assembly o = System.Reflection.Assembly.Load("mscorlib.dll");
System.Console.WriteLine(o.GetName());

Dữ liệu xuất:

mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089

Chú ý: Từ khóa C#: protected, internal không mang ý nghĩa trong IL, và không dùng trong Reflection APIs. Thuật ngữ IL gồm Family và Assembly. Để xác định phương thức nào là internal, dùng thuộc tính IsAssembly. Để xác định protected internal methods, dùng IsFamillyOrAssembly.

Situlations

Reflection dùng trong các tình huống

– Khi truy cập thuộc tính trong meta data của chương trình (xml). Xem thêm Accessing Attributes With Reflection (MSDN Online).

– Khảo sát và minh họa về types trong assembly

– Xây dựng các types mới lúc chạy chương trình. Dùng class System.Reflection.Emit

– Xem thêm Dynamically Loading and Using Types.

Advertisements

Author: dinhnn

Senior software developer, a technical leader. You can be reached at via email to dinhnguyenngoc@gmail.com, via my blog at dinhnguyenngoc.wordpress.com, and on Twitter @dinhnguyenngoc.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s