假设我有一个对象集合,它们都继承自一个基类。就像是...
abstract public class Animal
{
}
public class Dog :Animal
{
}
class Monkey : Animal
{
}
现在,我们需要喂养这些动物,但不允许它们知道如何喂养自己。如果可以,答案将很简单:
foreach( Animal a in myAnimals )
{
a.feed();
}
然而,他们不知道如何养活自己,所以我们想做这样的事情:
class Program
{
static void Main(string[] args)
{
List<Animal> myAnimals = new List<Animal>();
myAnimals.Add(new Monkey());
myAnimals.Add(new Dog());
foreach (Animal a in myAnimals)
{
Program.FeedAnimal(a);
}
}
void FeedAnimal(Monkey m) {
Console.WriteLine("Fed a monkey.");
}
void FeedAnimal(Dog d)
{
Console.WriteLine("Fed a dog.");
}
}
当然,这不会编译,因为它会迫使一个沮丧。
感觉好像有一种设计模式或其他一些带有泛型的解决方案可以帮助我解决这个问题,但我还没有把手指放在它上面。
建议?