2012-01-19 28 views

Trả lời

62

Bạn có thể tải tất cả các loại trong Assembly và sau đó liệt kê chúng để xem cái nào thực hiện kiểu đối tượng của bạn. Bạn đã nói 'đối tượng' để mẫu mã bên dưới không dành cho giao diện. Ngoài ra, mẫu mã này chỉ tìm kiếm cùng một cụm như đối tượng đã được khai báo.

class A 
{} 
... 
typeof(A).Assembly.GetTypes().Where(type => type.IsSubclassOf(typeof(A))); 

Hoặc như được đề xuất trong nhận xét, sử dụng mẫu mã này để tìm kiếm qua tất cả các cụm được nạp.

var subclasses = 
from assembly in AppDomain.CurrentDomain.GetAssemblies() 
    from type in assembly.GetTypes() 
    where type.IsSubclassOf(typeof(A)) 
    select type 

Cả hai mẫu mã yêu cầu bạn thêm using System.Linq; giao diện

+1

Để làm được điều tương tự cho một giao diện thay vì một đối tượng/lớp, có sự thay đổi nơi cho ' nơi typeof (IMyInterface) .IsAssignableFrom (type) && type.IsClass' ([câu hỏi gốc] (http://stackoverflow.com/questions/26733/getting-all-types-that-implement-an-interface-with-c -sharp-3-0)). – jtpereyda

9

lớp con ý nghĩa? Có:

this.GetType().GetInterfaces() 

Loại con nghĩa là loại cơ sở? Vâng, C# chỉ có thể có một lớp cơ sở

Các lớp con có nghĩa là tất cả các lớp được kế thừa từ lớp của bạn? Có:

EDIT: (nhờ vcsjones)

foreach(var asm in AppDomain.CurrentDomain.GetAssemblies()) 
{ 
     foreach (var type in asm.GetTypes()) 
     { 
      if (type.BaseType == this.GetType()) 
       yield return type; 
     } 
} 

Và làm điều đó cho tất cả các assembly được nạp

+6

"Lớp con có nghĩa là giao diện" - xin lỗi, nhưng điều này không có ý nghĩa – BartoszKP

Các vấn đề liên quan