如何从C#中的方法返回继承类型的正确类型?

时间:2019-01-21 11:37:02

标签: c# oop generics

以下是我要实现的目标。使用代码段更容易显示。

abstract class MyBaseType {}

class MyType1: MyBaseType() {}

class MyType2: MyBaseType() {}

class MyType3: MyBaseType() {}

public class Utils()
{
    public XXXX IdentifyCorrectType()
    {
        var identifyingCondition = GetCorrectType();// returns 1,2,3...
        switch(identifyingCondition)
        {
            case 1:
                return typeof(MyType1);break;
            case 2:
                return typeof(MyType2);break;
            case 3:
                return typeof(MyType3);break;
        }
    }
}

IdentifyCorrectType 方法的声明中,应该写什么代替 XXXX ,以使此代码得以编译?返回值用于在其他地方实例化该类型,因此仅需要从此方法返回正确的类型。

PS:由于类依赖关系并不总是随处可用,因此无法返回所需类(例如new MyType2())而不是类型的对象。

1 个答案:

答案 0 :(得分:2)

修改1: 根据{{​​1}},按照评论的更好方法应该是:

@Cid

您可以将Type class用作IdentifyCorrectType方法的输出:

public MyBaseType IdentifyCorrectType()
    {
        var identifyingCondition = GetCorrectType();// returns 1,2,3...
        switch (identifyingCondition)
        {
            case 1:
                return new MyType1();
            case 2:
                return new MyType2();
            case 3:
                return new MyType3();
            default:
                return null;
        }
    }