Mam następującą strukturę:Określanie typu zwracanej abstrakcyjnej metody z klasy bazowej według PODKLASA
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() {
}
}
Chcę stworzyć abstrakcyjną metodę, która zwraca niezależnie od klasy betonu klasy sub jest. Tak więc, jak widać na przykładzie, metoda w SubOne
powinna zwrócić List<SubOne>
, podczas gdy metoda w SubTwo
powinna zwrócić List<SubTwo>
.
Jakiego typu określam w podpisie zadeklarowanym w klasie bazowej?
[UPDATE]
Dziękuję za zamieszczonymi odpowiedziami.
Rozwiązaniem jest, aby klasa abstrakcyjna rodzajowe, takie jak:
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() {
}
}
w twojej aktualizacji/odpowiedź, w jaki sposób utworzyć listę lub kolekcję klasy „podstawowy”, które mogą zawierać zarówno SubOne i obiekty SubTwo? –