C#覆盖方法,并使用带有参数的多态性

时间:2019-11-25 21:15:09

标签: c# polymorphism

对于我正在开发的游戏,我正在考虑拥有动作的基础类。这将具有一个虚拟的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);
    }
}

0 个答案:

没有答案