[英]Receiving Generic Class as Parameter
我是 Generic Class 的新手。 我現在正在做一個游戲。 我會有很多敵人,它們都繼承自一個通用的 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<,>>();
}
我不知道這些語法是否正確,或者它們是否存在,但我只想知道類是否是 EnemyBase,而不管它的泛型。
謝謝
編輯:添加了通用類型用於
你不能有一個像EnemyBase<,>
這樣未綁定泛型類型的字段。
您需要為通用類定義一個非通用基類,如EnemyBase<TState, TTransition> : EnemyBase
或接口如EnemyBase<TState, TTransition> : IEnemy
。
然后你可以有一個EnemyBase
或IEnemy
字段。
你需要做這樣的事情:
public interface IEnemy
{
StateMachine m_FSM { get ; }
}
public abstract class EnemyBase<TState, TTransition> : IEnemy
{
protected StateMachine<TState, TTransition> m_FSM;
StateMachine IEnemy.m_FSM => this.m_FSM;
}
public class StateMachine
{
}
public class StateMachine<TState, TTransition> : StateMachine
{
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.