簡體   English   中英

接收通用類作為參數

[英]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

然后你可以有一個EnemyBaseIEnemy字段。

你需要做這樣的事情:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM