Bagaimana cara mendefinisikan kelas abstrak generik yang mewarisi kelas abstrak generik?

Saya memiliki kelas yang mewarisi kelas abstrak yang mewarisi kelas abstrak lainnya. Saya dapat mendefinisikan kelas paling super sebagai kelas generik, tetapi saya tidak tahu bagaimana mendefinisikan kelas menengah sebagai kelas generik sebelum saya mengungkapkan tipe sebenarnya yang saya inginkan di kelas ListResults terakhir.

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() {...}
}

Terima kasih atas bantuan Anda.


person Robert D    schedule 19.06.2018    source sumber
comment
Anda harus meluangkan waktu untuk membaca pesan kesalahan yang diberikan kompiler kepada Anda, dan secara khusus meluangkan waktu untuk mengikuti link ke halaman bantuan yang disediakan Visual Studio.   -  person Camilo Terevinto    schedule 19.06.2018
comment
Anda harus mendefinisikan T di tanda tangan HigherCommand sehingga dapat diteruskan oleh pengguna: HigherCommand<T>   -  person Rufus L    schedule 19.06.2018


Jawaban (1)


Anda masih perlu mendefinisikan parameter tipe generik T pada definisi HigherCommand sehingga dapat mendefinisikan LowerComand dengan benar.

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
Luarbiasa, terimakasih. Maaf, saya memulai C# kemarin dan saya baru saja mencari hal ini sambil jalan. - person Robert D; 19.06.2018