2008-11-21 62 views

回答

11

使用Assembly.GetTypes()獲取所有類型,並使用Type.IsAssignableFrom()檢查繼承。讓我知道你是否需要代碼 - 還有你是否使用.NET 3.5。 (LINQ to Objects很多反射任務都比較簡單。)

編輯:根據要求,這裏是一個例子 - 它找到mscorlib中的所有內容,它們實現IEnumerable。需要注意的是生活稍硬時基類型是普通...

using System; 
using System.Collections; 
using System.Linq; 
using System.Reflection; 

class Test 
{ 
    static void Main() 
    { 
     Assembly assembly = typeof(string).Assembly; 
     Type target = typeof(IEnumerable);   
     var types = assembly.GetTypes() 
          .Where(type => target.IsAssignableFrom(type)); 

     foreach (Type type in types) 
     { 
      Console.WriteLine(type.Name); 
     } 
    } 
} 
+0

喬恩斯基特無處不在!哈哈謝謝。 – 2008-11-21 15:17:43

+0

我很想看到這段代碼,因爲我無法使Type.IsAssignableFrom()以我理解它的方式工作。我在3.5 sp1上。謝謝! – 2009-02-05 00:42:24

1
var a = Assembly.Load("My.Assembly"); 
foreach (var t in a.GetTypes().Where(t => t is IMyInterface)) 
{ 
    // there you have it 
} 
0

或爲一個基類的子類:

var a = Assembly.Load("My.Assembly"); 
foreach (var t in a.GetTypes().Where(t => t.IsSubClassOf(typeof(MyType))) 
{ 
    // there you have it 
}