2013-12-11 52 views
6

是否有可能遍歷每個類的名稱空間併爲每個類初始化一個對象?例如,我想遍歷Test.POS命名空間中的所有類,爲每個類創建一個對象,然後在每個對象上調用runImportProcess方法。循環遍歷給定名稱空間中的所有類併爲每個類創建一個對象?

我知道,我可以通過一個命名空間環路,像這樣:

Type[] typelist = GetTypesInNamespace(Assembly.GetExecutingAssembly(), 
             "Test.POS"); 

foreach (Type t in typelist) 
{ 
    Console.WriteLine(t.Name); 
} 

我不知道是否有可能使用這個變量t來完成我想要的東西。任何洞察新手?

回答

4

嘗試Assembly.GetTypes()。然後按名稱空間過濾它們(並確保它們是你想要的)。要實例化它們,請使用Activator.CreateInstance(...)

+0

完美!現在,真正的挑戰是對這個新對象調用'runImportProcess()'方法。由於編譯器在編譯時並不知道類的屬性和方法,甚至有可能嗎?看看這個例子,看起來我必須以編程的方式定義在我調用Activator.CreateInstance()' - ObjectType實例=(ObjectType)Activator.CreateInstance(objectType)後該變量的類型;' – TimeBomb006

+1

你可以做到這一點 - 更好 - 創建一個共享界面。 –

4

試試這個:

var types = Assembly 
    .GetExecutingAssembly() 
    .GetTypes() 
    .Where(t => t.Namespace.StartsWith("Test.POS")); 

foreach (var t in types) 
{ 
    Console.WriteLine(t.Name); 
} 
3

您可以使用GetConstructor方法

using System; 
using System.Reflection; 

class Addition 
{ 
    public Addition(int a) 
    { 
     Console.WriteLine("Constructor called, a={0}", a); 
    } 
} 

class Test 
{ 
    static void Main() 
    { 
     Type type = typeof(Addition); 
     ConstructorInfo ctor = type.GetConstructor(new[] { typeof(int) }); 
     object instance = ctor.Invoke(new object[] { 10 }); 
    } 
} 
相關問題