Ho la seguente struttura:Specificando il tipo di ritorno di un metodo astratto da una classe base in base a una classe secondaria
abstract class Base {
public abstract List<...> Get(); //What should be the generic type?
}
class SubOne : Base {
public override List<SubOne> Get() {
}
}
class SubTwo : Base {
public override List<SubTwo> Get() {
}
}
Voglio creare un metodo astratto che restituisce qualsiasi classe la classe sub calcestruzzo è. Quindi, come puoi vedere dall'esempio, il metodo in SubOne
deve restituire List<SubOne>
mentre il metodo in SubTwo
deve restituire List<SubTwo>
.
Che tipo devo specificare nella firma dichiarata nella classe Base?
[UPDATE]
Grazie per le risposte distaccati.
La soluzione è quello di rendere la classe astratta generica, come ad esempio:
abstract class Base<T> {
public abstract List<T> Get();
}
class SubOne : Base<SubOne> {
public override List<SubOne> Get() {
}
}
class SubTwo : Base<SubTwo> {
public override List<SubTwo> Get() {
}
}
nell'aggiornamento/risposta, come è possibile creare un elenco o una raccolta di "base" classe che può contenere sia SubOne e SubTwo oggetti? –