接收通用类作为参数

时间:2018-10-03 21:06:38

标签: c# unity3d generics

我是通用类的新手。我正在制作游戏。我会遇到很多敌人,这些敌人都是从通用的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<,>>();
}

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

谢谢

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

2 个答案:

答案 0 :(得分:1)

您不能有一个具有不受约束的通用类型的字段,例如EnemyBase<,>

您需要为EnemyBase<TState, TTransition> : EnemyBase这样的通用类定义一个非通用基类,或者为EnemyBase<TState, TTransition> : IEnemy这样的接口定义一个类。

然后您可以拥有一个EnemyBaseIEnemy字段。

答案 1 :(得分:0)

您需要执行以下操作:

.carousel
相关问题