Ich kenne mich mit der C#-Syntax nicht genau aus und habe auch keinen Compiler hier.
Vom Prinzip her sieht das so aus, wie ich es mir auch vorgestellt hätte.
Ich weiß aber nicht, ob C# kovariante Rückgabetypen unterstützt, es könnte also sein, dass auch in den Unterklassen der Rückgabetyp Animal lauten müsste. Aber das wäre ja kein Problem.