我有以下问题。看看我的代码结构。 如果我的所有派生类在过程(动物a)中具有相同的方法序列,这将是确定的。但想象一下,我有Turtle类,它扩展了Animal,当Process(Animal a)被调用时,里面的方法必须以不同的顺序,并且类Turtle有一些额外的方法,例如Sleep。 在这种情况下我该怎么办? 感谢在C中使用虚拟方法#
public class Animal
{
public virtual string Eat(){ return "I'm eating"; }
public virtual string MakeNoise() { return "I'm ";}
public virtual string Go() { return "I'm walking"; }
}
public class Dog : Animal
{
public override string Eat()
{
return string.Format("{0} {1}",base.Eat(),"a pie");
}
public override string MakeNoise()
{
return string.Format("{0} {1}",base.MakeNoise(),"barking");
}
}
public class Controller
{
public void Process(Animal a)
{
a.Eat();
a.MakeNoise();
a.Go;
}
}
public class Client
{
IList<Animal> animals= new List<Animal>(){Dog,Cat,Turtle,Mouse}; //all animals have base class Animal
Controller = new Controller();
foreach(Animal a in animals)
{
p.Process(a);
}
}
这改变了'Controler',而不是'Animal'的行为,因此您需要创建重写类型,例如, 'TurtleController' – Rhumborl