接收通用类作为参数

何塞·若昂·德·奥利维拉·尤尼奥尔

我是通用类的新手。我正在制作游戏。我会有很多敌人,这些敌人都继承自通用的EnemyBase类

public abstract class EnemyBase<TState, TTransition>
{
     protected StateMachine<TState, TTransition> m_FSM;
}

因此,作为一个例子,我会有这样的事情:

public class EnemySquire : EnemyBase<EnemySquire.State, EnemySquire.StateTransition>
{
    public enum State
    {
        IDLE,
        WALK,
        ATTACKED,
        DEAD,
    }

    public enum StateTransition
    {
        FOUND_FREE_GRID,
        FINISHED,
        FREED,
        OUT_OF_LIFE,
        ATTACKED,
    }
}

到现在为止还挺好。我的问题是接收EnemyBase类作为参数。我想接收任何类型的EnemyBase,而不管其泛型如何。所以:

public class Player
{
   public void Attack<TState, TTransition>()
   {
        EnemyBase<TState,TTransition> enemy = GetComponent<EnemyBase<TState,TTransition>>();
   }
}

这将起作用,但是Attack方法在另一个方法内部被调用,因此该另一个方法也必须实现<TState, TTransition>,并且另一个方法被另一个方法调用...然后继续。

我想实现以下目标:

public void Attack()
{
     EnemyBase enemy = GetComponent<EnemyBase>();
}

要么

public void Attack()
{
     EnemyBase<,> enemy = GetComponent<EnemyBase<,>>();
}

我不知道这些sintax是否正确或是否存在,但我只想知道class是否为EnemyBase,而不管其泛型如何。

谢谢

编辑:添加了通用类型用于

沉默的罪

您的字段不能具有未绑定的通用类型,例如EnemyBase<,>

您需要为通用类(如)EnemyBase<TState, TTransition> : EnemyBase或接口(如)定义非通用基类EnemyBase<TState, TTransition> : IEnemy

然后,您可以有一个EnemyBaseorIEnemy字段。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章