Danh mục

C# và các lớp cơ sở Reflection – Phần 1

Số trang: 10      Loại file: pdf      Dung lượng: 112.18 KB      Lượt xem: 17      Lượt tải: 0    
Jamona

Hỗ trợ phí lưu trữ khi tải xuống: 1,000 VND Tải xuống file đầy đủ (10 trang) 0

Báo xấu

Xem trước 2 trang đầu tiên của tài liệu này:

Thông tin tài liệu:

Reflection là 1 thuật ngữ bao phủ 1 lớp cơ sở khác của .NET mà cho phép ta tìm ra thông tin về các kiểu trong chương trình. hầu hết những lớp này nằm trong namespace System.Reflection, và có 1 số lớn các lớp khác trong namespace này. trong phần này ta sẽ tìm hiểu lớp system.Type , mà cho phép ta truy nhập thông tin liên quan đến việc định nghĩa bất kì kiểu dữ liệu nào được cho.tiếp theo ta sẽ tìm hiểu lớp System.Reflection.assembly mà cho phép ta truy xuất thông tin về assembly được cho,...
Nội dung trích xuất từ tài liệu:
C# và các lớp cơ sở Reflection – Phần 1 C# và các lớp cơ sở Reflection – Phần 1Reflection là 1 thuật ngữ bao phủ 1 lớp cơ sở khác của .NET mà cho phép tatìm ra thông tin về các kiểu trong chương trình. hầu hết những lớp này nằmtrong namespace System.Reflection, và có 1 số lớn các lớp khác trongnamespace này.trong phần này ta sẽ tìm hiểu lớp system.Type , mà cho phép ta truy nhậpthông tin liên quan đến việc định nghĩa bất kì kiểu dữ liệu nào được cho.tiếptheo ta sẽ tìm hiểu lớp System.Reflection.assembly mà cho phép ta truy xuấtthông tin về assembly được cho, hoặc tải assembly đó vào trong chươngtrình của ta.cuối cùng ta sẽ xét ví dụ WhatsNewAttributesLớp System.TypeTa đã dùng lớp Type 1 số lần để lấy tên của 1 kiểu :Type t = typeof(double)Mặc dù ta cho rằng type là 1 lớp nhưng thực sự nó là 1 lớp cơ sở trừu tượng,bất cứ khi nào ta khởi tạo 1 đối tượng type ta thực sự khởi tạo 1 lớp dẫn xuấtcủa type.type có 1 lớp dẫn xuất đáp ứng mỗi kiểu dữ liệu.có 3 cách lấy 1tham chiếu Type mà chuyển cho kiểu dữ liệu bất kì: - Dùng tác tử typeof. tác tử này lấy tên của kiểu như là thông số . - Dùng phương thức Gettype() , mà tất cả các lớp kế thừa từSystem.Object: double d = 10;Type t = d.GetType(); Gettype() hữu ích khi ta có 1 tham chiếu đối tượng và không chắcđối tượng thực sự là thể hiện của lớp nào - Ta cũng có thể gọi phương thức static của lớp type ,getType(): Type t = Type.GetType(System.Double);Các thuộc tính của Type1. 1 số thuộc tính lấy chuỗi chứa các tên khác nhau kết hợp với lớp :Thuộc tính Trả về tên của kiểu dữ liệuName tên đầy đủ bao gồm cả namespaceFullNameThuộc tính Trả về tên namespace của kiểu dữ liệu.Namespace2. Có thể lấy những tham chiếu đến kiểu những đối tượng mà trình bày cáclớp có liên quan :Thuộc tính Kiểu tham chiếu trả về tương ứng với kiểu cơ sở trực tiếp của kiểu nàyBaseTypeUnderlyingSystemType kiểu mà kiểu này ánh xạ trong thời gian chạy .NET3. 1 số thuộc tính luận lý chỉ định liệu có phải là kiểu nào đó hay không vídụ là 1 lớp hay 1 kiểu liệt kê ... những thuộc tính này bao gồm : IsAbstract,IsArray, IsClassembly,IsEnum, IsInterface, IsPointer, IsPrimitive ( 1trong những kiểu dữ liệu bẩm sinh được định nghĩa trước), IsPublic,IsSealed, and IsValueType.Ví dụ :dùng kiểu dữ liệu bẩm sinh :Type intType = typeof(int);Console.WriteLine(intType.IsAbstract); // writesfalseConsole.WriteLine(intType.IsClassembly); // writes falseConsole.WriteLine(intType.IsEnum); // writes falseConsole.WriteLine(intType.IsPrimitive); // writes trueConsole.WriteLine(intType.IsValueType); // writes truehoặc dùng lớp Vector :Type intType = typeof(Vector);Console.WriteLine(intType.IsAbstract);//writes falseConsole.WriteLine(intType.IsClassembly); // writes trueConsole.WriteLine(intType.IsEnum); // writes falseConsole.WriteLine(intType.IsPrimitive); // writes falseConsole.WriteLine(intType.IsValueType); // writes falseCác phương thức :Hầu hết các phương thức của System.Type được sử dụng để chứa chi tiết cácthành viên của kiểu dữ liệu tương ứng - hàm dựng ,thuộc tính,phương thức ,biến cố...có nhiều phương thức nhưng tất cả chúng đều theo nền chung. vídụ , có hai phương thức mà nhận chi tiết phương thức của kiểu dữ liệu :getmethod() và getmethods(). getmethod() trả về 1 tham chiếu đến đối tượngSystem.Reflection.MethodInfo mà chứa chi tiết của 1 phương thức.getmethods() trả vế 1 mảng tham chiếu. điểm khác là getmethods() trả vềchi tiết của tất cả phương thức , trong khi getmethod() trả về chi tiết của chỉmột phương thức được chỉ định trong danh sách thông số.cả hai phương thứcđều overloads mà lấy thêm 1 thông số , BindingFlags liệt kê giá trị chỉ địnhthành viên nào nên được trả về- ví dụ như trả về 1 thành viên public, 1 thànhviên instance, thành viên static ...Ví dụ phương thức getmethods() không lấy thông số nào và trả về chi tiếtcủa tất cả phương thức thành viên của kiểu dữ liệu :Type t = typeof(double);MethodInfo [] methods = t.GetMethods();foreach (MethodInfo nextMethod in methods){// etc.Kiểu đối tượng trả về Các phương thức (phương thức số nhiều ( có s ở cuối tên ) trả về 1 mảng )ConstructorInfo GetConstructor(), GetConstructors()EventInfo GetEvent(), GetEvents()FieldInfo GetField(), GetFields()InterfaceInfo GetInterface(), GetInterfaces()Kiểu đối tượng trả về Các phương thức (phương thức số nhiều ( có s ở cuối tên ) trả về 1 mảng )MemberInfo GetMember(), GetMembers()MethodInfo GetMethod(), GetMethods()PropertyInfo GetProperty(), GetProperties()Phương thức getmember() và getmembers() trả ...

Tài liệu được xem nhiều: