foreach(PlayerBase p in Members)
{
p.Render();
}
Members
列表包含FieldPlayer
或GoalKeeper
类型的成员。 FieldPlayer
和GoalKeeper
继承自PlayerBase
。当我调用p.Render()
时,需要为FieldPlayer
或GoalKeeper
调用适当的Render
方法。我该怎么做?
谢谢
foreach(PlayerBase p in Members)
{
p.Render();
}
Members
列表包含FieldPlayer
或GoalKeeper
类型的成员。 FieldPlayer
和GoalKeeper
继承自PlayerBase
。当我调用p.Render()
时,需要为FieldPlayer
或GoalKeeper
调用适当的Render
方法。我该怎么做?
谢谢
FieldPlayer
和 GoalKeeper
重写了 Render
方法,那么这将自动发生。public abstract class PlayerBase
{
public virtual void Render();
}
public class FieldPlayer : PlayerBase
{
public override void Render() {...}
}
PlayerBase
是一个接口
。public inteface IPlayerBase
{
void Render();
}
public class FieldPlayer : IPlayerBase
{
public void Render()
{
MessageBox.Show("FieldPlayer.Render");
}
}
public class GoalKeeper : IPlayerBase
{
public void Render()
{
MessageBox.Show("GoalKeeper.Render");
}
}
PlayerBase
是一个抽象
类。public abstract class PlayerBase
{
public abstract void Render();
}
public class FieldPlayer : PlayerBase
{
public override void Render()
{
MessageBox.Show("FieldPlayer.Render");
}
}
public class GoalKeeper : PlayerBase
{
public override void Render()
{
MessageBox.Show("GoalKeeper.Render");
}
}
PlayerBase
是一个带有虚函数
的类public class PlayerBase
{
public virtual void Render()
{
MessageBox.Show("PlayerBase.Render");
}
}
public class FieldPlayer : PlayerBase
{
public override void Render()
{
MessageBox.Show("FieldPlayer.Render");
}
}
public class GoalKeeper : PlayerBase
{
public override void Render()
{
MessageBox.Show("GoalKeeper.Render");
}
}
对于所有三个实例,派生类型的Render
函数将被调用。
abstract class PlayerBase
{
public abstract void Render();
}
abstract class PlayerBase
{
public virtual void Render() {
// add common functionality
}
}
然后在你的子类中,比如说FieldKeeper
:
class FieldKeeper : PlayerBase {
public override void Render() {
// add additional functionality
base.Render();
}
}
PlayerBase
上声明 Render
为 virtual
(如果你有一个默认实现)或者 abstract
。然后,在子类中使用 override
方法来实现所需的行为。Render
标记为抽象的,然后每个派生类都必须实现它。