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?

questionAnswers(13)

yourAnswerToTheQuestion