对于我正在开发的游戏,我正在考虑拥有动作的基础类。这将具有一个虚拟的Do()函数,但是每个派生的动作将需要它们自己的特定动作关心的参数。所以我当时想我要为特定的动作(或者某些动作可以共享一个参数类)创建一个基础参数类,并从中派生出参数类。下面的方法有效,但是我是否必须在特定操作中像这样进行投射,还是有其他方法?如果我为该操作使用特定的参数,则覆盖的方法不喜欢它,因为它与父级Action虚拟不匹配,因此它甚至都不会编译。只是不确定我是否会错过另一种避免演员阵容的方法,因为在我看来这似乎不太理想。
class DoArguments
{
}
class MoveArguments : DoArguments
{
public int X { get; set; }
public int Z { get; set; }
}
class Action
{
public virtual void Do(DoArguments args) { }
}
class Move : Action
{
public override void Do(DoArguments args)
{
MoveArguments arg = (MoveArguments)args;
}
}
class Program
{
static void Main(string[] args)
{
Action move = new Move();
var moveArgs = new MoveArguments
{
X = 5,
Z = 6
};
move.Do(moveArgs);
}
}