我有以下問題。看看我的代碼結構。 如果我的所有派生類在過程(動物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