显然试图在这里简化问题。我有一个基类和一些派生类:
public class Mammal { }
public class Cat : Mammal { }
public class Dog : Mammal { }
还有一个实用程序类:
public static class AnotherClass
{
public static void GiveFood(Cat cat) {}
public static void GiveFood(Dog dog) {}
}
在其他地方是一个方法,Feed,它接受一个哺乳动物,从那里我想在另一个类上调用正确的重载:
public void Feed(Mammal mammal) {
// if mammal is a cat, call the AnotherClass.GiveFood overload for cat,
// if it's a dog, call the AnotherClass.GiveFood for dog, etc.
}
一种方法是执行以下操作:
public void Feed(Mammal mammal) {
if (mammal is dog)
AnotherClass.GiveFood((Dog)mammal);
if (mammal is Cat)
AnotherClass.GiveFood((Cat)mammal);
}
...但我实际上有大量来自哺乳动物的动物。有没有更好的方法来做我想要在 Feed() 中做的事情?有什么办法可以避免 Feed() 最终成为一个充满这些“如果 x 是 y 则调用 z”语句的巨大丑陋方法?