Вывод типа в абстрактном классе от наследования конкретного класса - PullRequest
0 голосов
/ 14 января 2019

То, что я пытаюсь сделать здесь, это вывести тип T абстрактного класса из типа конкретного наследуемого класса.

Например, у меня есть общий абстрактный класс:

public abstract class MyAbstract<T> where T : class {
    //Methods...
}

И наследующий конкретный класс, который наследует MyAbstract:

public class MyConcrete : MyAbstract<MyConcrete> { 
    //Methods..
}

Теперь, у меня это отлично работает, но я нахожу его многословным для этого абстрактного класса, так как он всегда будет иметь тип наследуемого класса. Я знаю, что можно сделать общий вывод типа для методов (спасибо Джон Скит http://joelabrahamsson.com/a-neat-little-type-inference-trick-with-c/),, но я не могу найти способ сделать это для вышеупомянутого.

В идеале, я бы

//Type T on MyAbstract is inferred to be MyConcrete.
public class MyConcrete : MyAbstract {
    //Methods...
}

Возможно ли то, что я хочу?

1 Ответ

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

Моя проблема была решена в комментариях. Для тех, кто ищет, это невозможно.

Однако мне нужна была только информация о типе подкласса в базовом классе, и в итоге я реализовал вывод типа в методах базового класса.

Мой код в итоге выглядел так

public abstract class MyAbstract {
    DoSomething<T>(T caller){
        //foo
    }
}

А в бетоне:

public class MyConcrete : MyAbstract {
    base.DoSomething(this);
}

Привет Жаку Б. за помощь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...