2010-03-19 19 views
6

से प्राप्त असेंबली से सभी प्रकार प्राप्त करना मैं एक असेंबली की सामग्री की जांच करने की कोशिश कर रहा हूं और इसमें उन सभी वर्गों को ढूंढ रहा हूं जो सीधे या परोक्ष रूप से विंडोज़ से प्राप्त किए गए हैं। Forms.UserControl।बेस क्लास

मैं यह कर रहा हूं:

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

लेकिन यह एक खाली सूची दे रहा है क्योंकि वर्गों में से कोई भी सीधे UserControl का विस्तार। मुझे इसे जल्दी से करने के प्रतिबिंब के बारे में पर्याप्त जानकारी नहीं है, और अगर मुझे ऐसा करने की ज़रूरत नहीं है तो मैं एक रिकर्सिव फ़ंक्शन नहीं लिखूंगा।

उत्तर

17

इसके बजाय आप Type.IsSubclassOf इस का उपयोग करना चाहिए:

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

Thats मैं क्या जरूरत है। धन्यवाद। – captncraig

1

आप उपयोग कर सकते हैं:

var assembly = Assembly.Load(filename); 
    var types = assembly.GetTypes().Where((type) => typeof(UserControl).IsAssignableFrom(type)); 
संबंधित मुद्दे