2010-03-19 20 views
6

'dan türetilen bir montajdan tüm türleri alma Bir derlemenin içeriğini incelemeye çalışıyorum ve içindeki tüm sınıfları doğrudan veya dolaylı olarak Windows.Forms.UserControl türetilmiş bulmaya çalışıyorum.Temel sınıf

Assembly dll = Assembly.LoadFrom(filename); 
var types = dll.GetTypes().Where(x => x.BaseType == typeof(UserControl)); 

Fakat sınıfların hiçbiri doğrudan UserControl genişletmek çünkü boş bir liste veriyor:

ben yapıyorum. Bunu yapmak için yansıma hakkında yeterince bilgim yok ve eğer yapmam gerekirse özyinelemeli bir işlev yazmamayı tercih ederim.

cevap

17

yerine Type.IsSubclassOf bu kullanmalısınız:

var types = dll.GetTypes().Where(x => x.IsSubclassOf(typeof(UserControl))); 
+0

ihtiyacım şey bu. Teşekkürler. – captncraig

1

Sen kullanabilirsiniz:

var assembly = Assembly.Load(filename); 
    var types = assembly.GetTypes().Where((type) => typeof(UserControl).IsAssignableFrom(type)); 
İlgili konular