Как определить общий абстрактный класс, который наследует общий абстрактный класс?

У меня есть класс, который наследует абстрактный класс, который наследует другой абстрактный класс. Я могу определить самый суперкласс как универсальный, но я не знаю, как определить средний класс как универсальный, прежде чем я выражу фактический тип, который я хочу, в финальном классе ListResults.

internal abstract class LowerCommand<T> {
    public abstract void Execute();
    public abstract List<T> ExecuteList();
}

// currently gives error for `T`
internal abstract class HigherCommand : Lowercommand<T> {
    // ... defines other stuff, nothing to do with
    //     already instantiated methods or T ...
}

class ListResults : HigherCommand<Results>
{
    public override void Execute() {...}
    public override List<Results> ExecuteList() {...}
}

Спасибо за вашу помощь.


person Robert D    schedule 19.06.2018    source источник
comment
Вам следует уделить время чтению сообщений об ошибках, которые выдает вам компилятор, и особенно уделить время переходу по ссылке на страницу справки, которую предоставляет Visual Studio.   -  person Camilo Terevinto    schedule 19.06.2018
comment
Вы должны определить T в подписи HigherCommand, чтобы пользователь мог передать ее: HigherCommand<T>   -  person Rufus L    schedule 19.06.2018


Ответы (1)


Вам по-прежнему необходимо определить параметр универсального типа T в определении HigherCommand, чтобы он, в свою очередь, мог правильно определить LowerComand.

internal abstract class LowerCommand<T> {
    public abstract void Execute();
    public abstract List<T> ExecuteList();
}

// Note that HigherCommand require a declaration of `T`
internal abstract class HigherCommand<T> : Lowercommand<T> {
    // ... defines other stuff, nothing to do with
    //     already instantiated methods or T ...
}

class ListResults : HigherCommand<Results>
{
    public override void Execute() {...}
    public override List<Results> ExecuteList() {...}
}
person dkackman    schedule 19.06.2018
comment
Потрясающе, спасибо. Извините, я начал C# вчера, и я как бы просто искал этот материал на ходу. - person Robert D; 19.06.2018