2009-11-03 40 views
11
class Foo { } 

    class Foo1 : Foo { } 

    class Foo2 : Foo { } 

Làm cách nào để có thể nhận tất cả các lớp sử dụng Foo làm lớp cơ sở? Các lớp kế thừa không cần thiết trong cùng một assembly.Làm thế nào tôi có thể nhận được tất cả các lớp thừa kế của một lớp cơ sở?

+1

lúc thiết kế hoặc thời gian chạy? Nếu thiết kế thì bạn có thể tham khảo câu hỏi này cho một số mẹo http://stackoverflow.com/questions/282377/visual-studio-how-do-i-show-all-classes-inherited-from-a-base-class –

+0

Vào thời gian chạy, cảm ơn. – Carlsberg

Trả lời

15

Đây không phải là nhanh, nhưng miễn là Foo là một loại cụ thể (không phải là giao diện), thì nó sẽ hoạt động. Foo chính nó không được trả lại bởi mã này.

AppDomain.CurrentDomain.GetAssemblies() 
         .SelectMany(assembly => assembly.GetTypes()) 
         .Where(type => type.IsSubclassOf(typeof(Foo))); 
+1

Tôi không nghĩ có cách nào nhanh hơn để thực hiện việc này. – SLaks

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