Sử dụng phản ánh, tôi cần điều tra một DLL người dùng và tạo đối tượng của một lớp trong đó.Tạo đối tượng mà không biết tên lớp tại thời điểm thiết kế
Cách đơn giản để làm điều đó là gì?
Sử dụng phản ánh, tôi cần điều tra một DLL người dùng và tạo đối tượng của một lớp trong đó.Tạo đối tượng mà không biết tên lớp tại thời điểm thiết kế
Cách đơn giản để làm điều đó là gì?
Hãy thử Activator.CreateInstance.
Bạn có thể tạo một thể hiện của một lớp từ một đối tượng sử dụng Loại Activator.CreateInstance, để có được tất cả các loại trong một dll bạn có thể sử dụng Assembly.GetTypes
Hãy nhìn vào những liên kết này:
http://www.java2s.com/Code/CSharp/Development-Class/Createanobjectusingreflection.htm
http://msdn.microsoft.com/en-us/library/k3a58006.aspx
bạn về cơ bản sử dụng phản ánh để nạp một assembly, sau đó tìm một loại mà bạn đang quan tâm. một khi bạn có các loại, bạn có thể hỏi để tìm thấy nó là nhà thầu hoặc khác gặp hods/tài sản. Một khi bạn có hàm tạo, bạn có thể gọi nó. Dễ dàng!
System.Reflection.Assembly
là lớp bạn sẽ muốn sử dụng. Nó chứa nhiều phương thức để lặp qua các kiểu có chứa một DLL người dùng. Bạn có thể lặp qua từng lớp, có lẽ xem nếu nó được thừa hưởng từ một giao diện cụ thể, vv
http://msdn.microsoft.com/en-us/library/system.reflection.assembly_members.aspx
tra Assembly.GetTypes()
phương pháp để nhận được danh sách các loại, hoặc Assembly.GetExportedTypes()
cho chỉ những người nào.
Như nó đã được nói, bạn cần phải ping không gian tên System.Reflection.
Nếu bạn biết trước vị trí/tên của tệp DLL bạn muốn tải, bạn cần lặp lại thông qua Assembly.GetTypes().
Trong mã giả, nó sẽ trông giống như sau:
Tạo và lắp ráp đối tượng.
Lặp lại tất cả các loại có trong hội đồng.
Khi bạn tìm thấy thứ bạn đang tìm kiếm, hãy gọi nó (CreateInstance)…
Sử dụng nó một cách khôn ngoan.
;)
Tôi có rất nhiều mã Reflection nếu bạn muốn có một cái nhìn xung quanh, nhưng nhiệm vụ là thực sự đơn giản và có ít nhất một chục bài báo với các mẫu hiện có trong tự nhiên. (Aka Google). Mặc dù vậy, MSDN là bạn của bạn cho tham chiếu phản chiếu.