Как вернуть правильный тип унаследованного типа из метода в C #? - PullRequest
0 голосов
/ 21 января 2019

Вот что я пытаюсь достичь ниже. Это легче показать с помощью фрагмента кода.

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;
        }
    }
}

Что должно быть написано вместо XXXX в объявлении IdentifyCorrectType метод для этого кода для компиляции? Возвращаемое значение используется где-то еще для создания экземпляра этого типа, поэтому из этого метода нужно возвращать только правильный тип.

PS: Возврат объектов желаемых классов (например, new MyType2()) вместо типов невозможен из-за зависимостей классов, которые не всегда доступны везде.

1 Ответ

0 голосов
/ 21 января 2019

Редактировать 1: Согласно @Cid, лучший подход к комментариям должен быть следующим:

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;
        }
    }

Вы можете использовать Тип класса как вывод метода IdentifyCorrectType:

public Type IdentifyCorrectType()
{
    var identifyingCondition = GetCorrectType();// returns 1,2,3...
    switch(identifyingCondition)
    {
        case 1:
            return typeof(MyType1);
        case 2:
            return typeof(MyType2);
        case 3:
            return typeof(MyType3);
        default:
            return null;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...