让年代说我有一个对象集合,所有从基类继承。之类的……
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.");
}
}
当然,这不会编译,因为它会迫使哭笑不得。
感觉好像有一个设计模式或其他解决方案与仿制药,帮我出这个问题,但是我还没把我的手指放在它。
建议吗?