C# và các lớp cơ sở Reflection – Phần 2
Số trang: 12
Loại file: pdf
Dung lượng: 114.21 KB
Lượt xem: 11
Lượt tải: 0
Xem trước 2 trang đầu tiên của tài liệu này:
Thông tin tài liệu:
Lớp assembly Lớp assembly được định nghĩa trong namespace System.Reflection , cho phép ta truy xuất vào các metadata trong 1 assembly. Nó cũng chứa những phương thức cho phép ta thực thi 1 assembly,. Như lớp Type, nó chứa 1 số lớn những phương thức và thuộc tính.ta không thể xem xét hết.thay vào đó ta sẽ chỉ tìm hiểu một sồ phưong thức thuộc tính cần thiết. trước khi làm bất cứ điều gì với 1 thể hiện assembly ta cần tải nó vào tiến trình chạy.ta làm điều này bằng cách gọi phương thức static assembly.Load()...
Nội dung trích xuất từ tài liệu:
C# và các lớp cơ sở Reflection – Phần 2 C# và các lớp cơ sở Reflection – Phần 2Lớp assemblyLớp assembly được định nghĩa trong namespace System.Reflection , chophép ta truy xuất vào các metadata trong 1 assembly. Nó cũng chứa nhữngphương thức cho phép ta thực thi 1 assembly,. Như lớp Type, nó chứa 1 sốlớn những phương thức và thuộc tính.ta không thể xem xét hết.thay vào đóta sẽ chỉ tìm hiểu một sồ phưong thức thuộc tính cần thiết.trước khi làm bất cứ điều gì với 1 thể hiện assembly ta cần tải nó vào tiếntrình chạy.ta làm điều này bằng cách gọi phương thức static assembly.Load()và assembly.LoadFrom(). điểm khác giữa 2 phương thức là load() lấy têncủa assembly,mà phải là assembly được tham chiếu từ assembly đang thựcthi đương thời( nói cách khác nó là assembly mà ta tham chiếu khi biên dịchdự án lần đầu.)trong khi loadfrom() lấy đường dẫn của assembly,mà có thểlà assembly bất kì được trình bày trong hệ thống :Assembly assembly1 = Assembly.Load(SomeAssembly);Assembly assembly2 = Assembly.LoadFrom (@C:My ProjectsGroovySoftwareSomeOtherAssembly);Có 1 số cách overload khác của 2 phương thức này,mà thêm thông tin bảomật.mỗi lần ta nạp 1 assembly,ta có thể dùng những thuộc tính khác trên nóđể tìm, ví dụ tên đầu đủ của nó :string name = assembly1.FullName;Xem xét các kiểu được định nghĩa trong 1 assembly1 khía cạnh hay của lớp assembly là nó cho phép ta lấy chi tiết tất cả cáckiểu mà được định nghĩa trong assembly tương ứng.ta đơn giản gọiassembly.getTypes() ,trả về 1 mảng System.Type tham chiếu chứa tất cả cáckiểu. ta có thể thao tác những tham chiếu kiểu này như đối tượng Type dùngtác tử typeof hoặc Object.Gettype():Type[] types = theassembly.GetTypes();foreach(Type definedType in types)DoSomethingWith(definedType);Các thuộc tính tuỳ chọn.Các phương thức ta dùng để tìm những thuộc tính tuỳ chọn được định nghĩatrên 1 assembly hoặc trên kiểu tuỳ thuộc vào kiểu của đối tượng đi kèm.nếuta muốn tìm những thuộc tính tuỳ chọn đi kèm với 1 assembly ,ta cần gọiphương thức static của lớp attribute, GetCustomAttributes() truyền 1 thamchiếu đến assembly:Attribute [] definedAttributes =Attribute.GetCustomAttributes(assembly1);// assembly1 là 1 đối tưọng assemblyGetCustomAttributes() đưọc dùng để lấy các thuộc tính của assembly, có vàioverload : nếu ta gọi không có đặc tả thông số thì nó trả về tất cả các thuộctính tuỳ chọn được điịnh nghĩa trong assembly đó.ta cũng có thể gọi nó bằngcách chỉ định thông số thứ hai, là 1 đối tưọng Type chỉ định lớp thuộc tính.trong trường hợp này GetCustomAttributes() trả về 1 mảng bao gồm tất cảcác thuộc tính trình bày của lớp đó.ta sẽ dùng overload này trong ví dụWhatsNewAttributes.để tìm các thuộc tính SupportsWhatsNew có được hay không.để làm điều này ta gọitrình bày trong assemblyGetCustomAttributes() truyền 1 tham chiếu đến assembly ,và kiểu thuộc tínhSupportWhatsNewAttribute .nếu thuộc tính này được trình bày , ta có 1mảng chứa tất cả các thể hiện của nó.nếu không có trả về null:Attribute supportsAttribute =Attribute.GetCustomAttributes(assembly1,typeof(SupportsWhatsNewAttribute));Lưu ý tất cả các attribute được lưu như các tham chiếu attribute.nếu ta muốngọi bất kì phương thức hay thuộc tính nào mà ta đã định nghĩa trongattribute,thì ta sẽ cần ép kiểu những tham chiếu đó tường minh thành nhữnglớp attribute tuỳ chọn có liên quan.ta có thể lấy chi tiết của các attribute tuỳchọn mà đi kèm với 1 kiểu dữ liệu đã cho bằng cách gọi overload khác củaassembly.GetCustomAttributes(), lần này truyền 1 tham chiếu Type mà môtả kiểu mà ta muốn để lưu bất kì attribute đi kèm.mặt khác nếu ta muốn lấynhững attribute mà đi kèm với phương thức,hàm dựng,trường.. thì ta cần gọiGetCustomAttributes() mà là thành viên của 1 trong những lớpMethodInfo,ConstructorInfo, FieldInfo ...phần này nằm ngoài nội dung củachương.Hoàn chỉnh ví dụ WhatsNewAttributesTa có thể hoàn chỉnh ví dụ này bằng cách viết thêm assembly cuối cùngtrong ví dụ assembly LookUpWhatsNew. phần này của ứng dụng là 1 ứngdụng console. tuy nhiên ,nó cần tham chiếu 2 assembly khác . mặc dù ta sắpviết 1 ưng dụng dòng lệnh, nhưng ta sẽ làm theo ví dụ TypeView trước trìnhbày kết quả trong 1 message box.tập tin được gọi LookUpWhatsNew.cs và lệnh để biên dịch nó là :csc /reference:WhatsNewAttributes.dll /reference:VectorClassembly.dllLookUpWhatsNew.csTrong phần mã của tập tin này ,đầu tiên ta chỉ định các namespace ta muốndùng, trong đó có system.Text vì ta cần sử dụng 1 đối tượng Stringbuilderlần nữa:using System;using System.Reflection;using System.Windows.Forms;using System.Text;using Wrox.ProCSharp.VectorClassembly;using Wrox.ProCSharp.WhatsNewAttributes;namespace Wrox.ProCSharp.LookUpWhatsNew{lớp chính là WhatsNewChecker, mọi phương thức đều được định ...
Nội dung trích xuất từ tài liệu:
C# và các lớp cơ sở Reflection – Phần 2 C# và các lớp cơ sở Reflection – Phần 2Lớp assemblyLớp assembly được định nghĩa trong namespace System.Reflection , chophép ta truy xuất vào các metadata trong 1 assembly. Nó cũng chứa nhữngphương thức cho phép ta thực thi 1 assembly,. Như lớp Type, nó chứa 1 sốlớn những phương thức và thuộc tính.ta không thể xem xét hết.thay vào đóta sẽ chỉ tìm hiểu một sồ phưong thức thuộc tính cần thiết.trước khi làm bất cứ điều gì với 1 thể hiện assembly ta cần tải nó vào tiếntrình chạy.ta làm điều này bằng cách gọi phương thức static assembly.Load()và assembly.LoadFrom(). điểm khác giữa 2 phương thức là load() lấy têncủa assembly,mà phải là assembly được tham chiếu từ assembly đang thựcthi đương thời( nói cách khác nó là assembly mà ta tham chiếu khi biên dịchdự án lần đầu.)trong khi loadfrom() lấy đường dẫn của assembly,mà có thểlà assembly bất kì được trình bày trong hệ thống :Assembly assembly1 = Assembly.Load(SomeAssembly);Assembly assembly2 = Assembly.LoadFrom (@C:My ProjectsGroovySoftwareSomeOtherAssembly);Có 1 số cách overload khác của 2 phương thức này,mà thêm thông tin bảomật.mỗi lần ta nạp 1 assembly,ta có thể dùng những thuộc tính khác trên nóđể tìm, ví dụ tên đầu đủ của nó :string name = assembly1.FullName;Xem xét các kiểu được định nghĩa trong 1 assembly1 khía cạnh hay của lớp assembly là nó cho phép ta lấy chi tiết tất cả cáckiểu mà được định nghĩa trong assembly tương ứng.ta đơn giản gọiassembly.getTypes() ,trả về 1 mảng System.Type tham chiếu chứa tất cả cáckiểu. ta có thể thao tác những tham chiếu kiểu này như đối tượng Type dùngtác tử typeof hoặc Object.Gettype():Type[] types = theassembly.GetTypes();foreach(Type definedType in types)DoSomethingWith(definedType);Các thuộc tính tuỳ chọn.Các phương thức ta dùng để tìm những thuộc tính tuỳ chọn được định nghĩatrên 1 assembly hoặc trên kiểu tuỳ thuộc vào kiểu của đối tượng đi kèm.nếuta muốn tìm những thuộc tính tuỳ chọn đi kèm với 1 assembly ,ta cần gọiphương thức static của lớp attribute, GetCustomAttributes() truyền 1 thamchiếu đến assembly:Attribute [] definedAttributes =Attribute.GetCustomAttributes(assembly1);// assembly1 là 1 đối tưọng assemblyGetCustomAttributes() đưọc dùng để lấy các thuộc tính của assembly, có vàioverload : nếu ta gọi không có đặc tả thông số thì nó trả về tất cả các thuộctính tuỳ chọn được điịnh nghĩa trong assembly đó.ta cũng có thể gọi nó bằngcách chỉ định thông số thứ hai, là 1 đối tưọng Type chỉ định lớp thuộc tính.trong trường hợp này GetCustomAttributes() trả về 1 mảng bao gồm tất cảcác thuộc tính trình bày của lớp đó.ta sẽ dùng overload này trong ví dụWhatsNewAttributes.để tìm các thuộc tính SupportsWhatsNew có được hay không.để làm điều này ta gọitrình bày trong assemblyGetCustomAttributes() truyền 1 tham chiếu đến assembly ,và kiểu thuộc tínhSupportWhatsNewAttribute .nếu thuộc tính này được trình bày , ta có 1mảng chứa tất cả các thể hiện của nó.nếu không có trả về null:Attribute supportsAttribute =Attribute.GetCustomAttributes(assembly1,typeof(SupportsWhatsNewAttribute));Lưu ý tất cả các attribute được lưu như các tham chiếu attribute.nếu ta muốngọi bất kì phương thức hay thuộc tính nào mà ta đã định nghĩa trongattribute,thì ta sẽ cần ép kiểu những tham chiếu đó tường minh thành nhữnglớp attribute tuỳ chọn có liên quan.ta có thể lấy chi tiết của các attribute tuỳchọn mà đi kèm với 1 kiểu dữ liệu đã cho bằng cách gọi overload khác củaassembly.GetCustomAttributes(), lần này truyền 1 tham chiếu Type mà môtả kiểu mà ta muốn để lưu bất kì attribute đi kèm.mặt khác nếu ta muốn lấynhững attribute mà đi kèm với phương thức,hàm dựng,trường.. thì ta cần gọiGetCustomAttributes() mà là thành viên của 1 trong những lớpMethodInfo,ConstructorInfo, FieldInfo ...phần này nằm ngoài nội dung củachương.Hoàn chỉnh ví dụ WhatsNewAttributesTa có thể hoàn chỉnh ví dụ này bằng cách viết thêm assembly cuối cùngtrong ví dụ assembly LookUpWhatsNew. phần này của ứng dụng là 1 ứngdụng console. tuy nhiên ,nó cần tham chiếu 2 assembly khác . mặc dù ta sắpviết 1 ưng dụng dòng lệnh, nhưng ta sẽ làm theo ví dụ TypeView trước trìnhbày kết quả trong 1 message box.tập tin được gọi LookUpWhatsNew.cs và lệnh để biên dịch nó là :csc /reference:WhatsNewAttributes.dll /reference:VectorClassembly.dllLookUpWhatsNew.csTrong phần mã của tập tin này ,đầu tiên ta chỉ định các namespace ta muốndùng, trong đó có system.Text vì ta cần sử dụng 1 đối tượng Stringbuilderlần nữa:using System;using System.Reflection;using System.Windows.Forms;using System.Text;using Wrox.ProCSharp.VectorClassembly;using Wrox.ProCSharp.WhatsNewAttributes;namespace Wrox.ProCSharp.LookUpWhatsNew{lớp chính là WhatsNewChecker, mọi phương thức đều được định ...
Tìm kiếm theo từ khóa liên quan:
lập trình tài liệu lập trình kỹ thuật lập trình giáo trình C ngôn ngữ lập trình C tự học lập trình với CGợi ý tài liệu liên quan:
-
Kỹ thuật lập trình trên Visual Basic 2005
148 trang 247 0 0 -
101 trang 198 1 0
-
NGÂN HÀNG CÂU HỎI TRẮC NGHIỆM THIẾT KẾ WEB
8 trang 188 0 0 -
Giới thiệu môn học Ngôn ngữ lập trình C++
5 trang 181 0 0 -
Luận văn: Nghiên cứu kỹ thuật giấu tin trong ảnh Gif
33 trang 147 0 0 -
Bài giảng Nhập môn về lập trình - Chương 1: Giới thiệu về máy tính và lập trình
30 trang 147 0 0 -
Tìm hiểu về ngôn ngữ lập trình C: Phần 1 - Quách Tuấn Ngọc
211 trang 146 0 0 -
161 trang 129 1 0
-
Bài giảng lập trình c căn bản - Trường Apptech - Chương 4
27 trang 117 0 0 -
Giáo trình Lập trình C căn bản - HanoiAptech Computer Education Center
136 trang 117 0 0