得到一个没有很多if语句的类

Dan*_*ahi 3 c# xna class

我有一定数量的类继承自抽象类:

abstract public class baseClass
{
    //logics
}

public class child1 : baseClass
{
}

public class child2 : baseClass
{
}
Run Code Online (Sandbox Code Playgroud)

现在我有一些管理类,必须创建这些类中的一个,具体取决于枚举,它将具有相同名称的值,如下所示:

public enum ClassType
{
    child1,
    child2
}

public class Manager
{
    private List<baseClass> _workers;

    public void Initialize(ClassType type)
    {
        //what logics to put here? (resulting in correctChild)
        _workers.Add(correctChild);
    }
}
Run Code Online (Sandbox Code Playgroud)

我在考虑使用typeof,但不知道如何实现它.注意:在这个例子中,它是2个类,但在实际情况下,它是任意数量的类.

mem*_*tei 6

看看Activator.CreateInstance()

使用命名的程序集和默认构造函数创建指定了其名称的类型的实例.

所以代码看起来像

Activator.CreateInstance(type.ToString(),assemblyName);
Run Code Online (Sandbox Code Playgroud)

我实际上熟悉这样的实现,我自己也用过它.我还建议查看这篇文章,解释如何在枚举值上实际使用属性,以存储实际的类名.您甚至可以将其用作扩展程序.

 public static string Description(this Enum enumValue) {
        Type enumType = enumValue.GetType();
        FieldInfo field = enumType.GetField(enumValue.ToString());
        object[] attributes = field.GetCustomAttributes(typeof(DescriptionAttribute), false);
        return attributes.Length == 0 ? enumValue.ToString() : ((DescriptionAttribute)attributes[0]).Description;
}
Run Code Online (Sandbox Code Playgroud)

然后代码看起来像

Activator.CreateInstance(classType.Description(), assemblyName);
Run Code Online (Sandbox Code Playgroud)