C #: Nadpisywanie typów zwrotów
Czy istnieje sposób na zastąpienie typów powrotu w C #? Jeśli tak, to w jaki sposób, a jeśli nie, dlaczego i jaki jest zalecany sposób na to?
Mój przypadek jest taki, że mam interfejs z abstrakcyjną klasą bazową i jej potomkami. Chciałbym to zrobić (ok, nie do końca, ale jako przykład!):
<code>public interface Animal { Poo Excrement { get; } } public class AnimalBase { public virtual Poo Excrement { get { return new Poo(); } } } public class Dog { // No override, just return normal poo like normal animal } public class Cat { public override RadioactivePoo Excrement { get { return new RadioActivePoo(); } } } </code>
RadioactivePoo
oczywiście dziedziczy poPoo
.
Mój powód, dla którego tego pragnę, jest taki, że ci, którzy go używająCat
obiekty mogą korzystać zExcrement
nieruchomość bez konieczności rzucaniaPoo
wRadioactivePoo
na przykładCat
nadal może być częściąAnimal
lista, gdzie użytkownicy niekoniecznie muszą być świadomi lub troszczyć się o swoją radioaktywną kupkę. Mam nadzieję, że to miało sens ...
O ile widzę, kompilator tego nie pozwala. Więc myślę, że to niemożliwe. Ale co poleciłbyś jako rozwiązanie tego problemu?