C #: substituindo tipos de retorno

Existe maneira de substituir tipos de retorno em c #? Se sim, como e se não o porquê e o que é uma maneira recomendada de fazer isso?

Meu caso é que eu tenho uma interface com uma classe base abstrata e descendentes disso. Eu gostaria de fazer isso (ok, não realmente, mas como exemplo!):

<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 naturalmente herda dePoo.

Minha razão para querer isso é para que aqueles que usamCat objetos poderiam usar oExcrement propriedade sem ter que lançar oPoo para dentroRadioactivePoo enquanto, por exemplo, oCat ainda poderia ser parte de umAnimal lista onde os usuários podem não estar necessariamente cientes ou se preocuparem com seu cocô radioativo. Espero que tenha feito sentido ...

Tanto quanto eu posso ver o compilador não permite isso, pelo menos. Então eu acho que é impossível. Mas o que você recomendaria como uma solução para isso?

questionAnswers(13)

yourAnswerToTheQuestion