遍历给定命名空间中的所有类并为每个类创建一个对象?

时间:2013-12-11 19:31:31

标签: c# .net

是否可以遍历命名空间中的每个类并为每个类初始化一个对象?

例如,我想循环遍历Test.POS命名空间中的所有类,为每个类创建一个对象,并在每个对象上调用runImportProcess方法。

我知道我可以像这样循环一个命名空间:

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

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

我不确定是否可以使用此t变量来完成我想要的任务。对新手的任何见解?

4 个答案:

答案 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)

您可以使用反射器从程序集中获取所有类:

Getting all types in a namespace via reflection

然后使用activator创建检索类的新实例:

Get a new object instance from a Type