Bạn có thể sử dụng Type.GetType(string) để phản ánh một lớp học. Type
có các phương pháp để khám phá các thành viên khác, bao gồm một phương pháp, có sẵn cho loại đó.
Một thủ thuật, tuy nhiên, là GetType
muốn có tên đủ điều kiện lắp ráp. Nếu bạn chỉ sử dụng tên lớp, nó sẽ cho rằng bạn đang tham chiếu đến assembly hiện tại.
Vì vậy, nếu bạn muốn tìm loại trong tất cả các assembly được nạp, bạn có thể làm một cái gì đó như thế này (sử dụng LINQ):
var type = (from assembly in AppDomain.CurrentDomain.GetAssemblies()
from type in assembly.GetTypes()
where type.Name == className
select type);
Tất nhiên, có thể có nhiều điều hơn thế, nơi bạn sẽ muốn phản ánh qua các hội đồng được tham chiếu có thể chưa được tải, v.v.
Để xác định các không gian tên, phản ánh không xuất khẩu rõ ràng. Thay vào đó, bạn sẽ phải làm một cái gì đó như:
var namespaceFound = (from assembly in AppDomain.CurrentDomain.GetAssemblies()
from type in assembly.GetTypes()
where type.Namespace == namespace
select type).Any()
Đưa nó tất cả cùng nhau, bạn sẽ có cái gì như:
var type = (from assembly in AppDomain.CurrentDomain.GetAssemblies()
from type in assembly.GetTypes()
where type.Name == className && type.GetMethods().Any(m => m.Name == methodName)
select type).FirstOrDefault();
if (type == null) throw new InvalidOperationException("Valid type not found.");
object instance = Activator.CreateInstance(type);
Hãy nhớ để đánh dấu câu trả lời thích hợp nhất như một câu trả lời. –