0

私は3つのクラス、、、を持ってParentClassClassAますClassBClassAとは両方ともClassBのサブクラスですParentClass。タイプのオブジェクトを作成するか、ある種の列挙を使用してタイプを識別してから、親タイプとしてキャストされたオブジェクトをインスタンス化してみClassAますClassB。どうすれば動的にそれを行うことができますか?以下のコードと、と書かれている部分を見てください//what do I put here?。読んでくれてありがとう!

enum ClassType
{
    ClassA,
    ClassB
};
public abstract class ParentClass
{


    public ParentClass()
    {
        //....
    }

    public static ParentClass GetNewObjectOfType(ClassType type)
    {
        switch(type)
        {
            case ClassType.ClassA: 
                //What do I put here?
                break;
            case ClassType.ClassB:
                //What do I put here?
                break;
        }

        return null;
    }
}

public class ClassA:ParentClass
{
    //....
}
public class ClassB:ParentClass
{
    //.......
}
4

1 に答える 1

6

なぜこれだけではないのですか?

public class ParentClass 
{
    public static ParentClass GetNewObjectOfType(ClassType type)
    {
        switch(type)
        {
            case ClassType.ClassA: 
                return new ClassA();
                break;
            case ClassType.ClassB:
                return new ClassB();
                break;
        }

        return null;
    }
}

public class ClassA:ParentClass
{
    //....
}
public class ClassB:ParentClass
{
    //.......
}

ただし、サブクラスにデフォルトのコンストラクターを定義すると、これははるかに簡単になります...

public class ParentClass 
{
    private static Dictionary<ClassType, Type> typesToCreate = ...

    // Generics are cool
    public static T GetNewObjectOfType<T>() where T : ParentClass
    {
        return (T)GetNewObjectOfType(typeof(T));
    }

    // Enums are fine too
    public static ParentClass GetNewObjectOfType(ClassType type)
    {
        return GetNewObjectOfType(typesToCreate[type]);
    }

    // Most direct way to do this
    public static ParentClass GetNewObjectOfType(Type type)
    {
        return Activator.CreateInstance(type);
    }
}
于 2013-02-20T22:11:31.517 に答える