我是通用类的新手。我正在制作游戏。我会遇到很多敌人,这些敌人都是从通用的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,而不论其泛型。
谢谢
编辑:添加了用于什么通用类型
答案 0 :(得分:1)
您不能有一个具有不受约束的通用类型的字段,例如EnemyBase<,>
。
您需要为EnemyBase<TState, TTransition> : EnemyBase
这样的通用类定义一个非通用基类,或者为EnemyBase<TState, TTransition> : IEnemy
这样的接口定义一个类。
然后您可以拥有一个EnemyBase
或IEnemy
字段。
答案 1 :(得分:0)
您需要执行以下操作:
.carousel