是否可以遍历命名空间中的每个类并为每个类初始化一个对象?
例如,我想循环遍历Test.POS命名空间中的所有类,为每个类创建一个对象,并在每个对象上调用runImportProcess
方法。
我知道我可以像这样循环一个命名空间:
Type[] typelist = GetTypesInNamespace(Assembly.GetExecutingAssembly(),
"Test.POS");
foreach (Type t in typelist)
{
Console.WriteLine(t.Name);
}
我不确定是否可以使用此t
变量来完成我想要的任务。对新手的任何见解?
答案 0 :(得分:4)
试试Assembly.GetTypes()
。然后按命名空间过滤它们(并确保它们是您想要的)。要实例化它们,请使用Activator.CreateInstance(...)
。
答案 1 :(得分:4)
试试这个:
var types = Assembly
.GetExecutingAssembly()
.GetTypes()
.Where(t => t.Namespace.StartsWith("Test.POS"));
foreach (var t in types)
{
Console.WriteLine(t.Name);
}
答案 2 :(得分: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 });
}
}
答案 3 :(得分:2)