public abstract class State<T>
{
public virtual Enter(T item)
{
// an empty method
}
}
public class ChaseState : State<FieldPlayer>
{
public override Enter(Player pl)
{
// ...
pl.Fsm.CurrentState = ChaseState.Instance;
//...
}
}
public class TendGoal : State<Goalkeeper>
{
public override Enter(Goalkeeper gk)
{
// ...implementation
gk.Fsm.CurrentState = TendGoal.Instance;
// ...implementation
}
}
public class DefendState : State<Team>
{
public override Enter(Team team)
{
// ....
team.Fsm.CurrentState = DefendState.Instance;
//.....
}
}
「守門員」和「FieldPlayer」繼承自抽象類「Player」,而「Team」繼承自另一個類。C#存儲泛型狀態
public class FSM
{
public /*some type*/ owner; // PROBLEM 1
// OWNER CAN BE TEAM, GOALKEEPEEPER
// OR FIELD PLAYER
public /*some type*/ globalState;
public /*some type*/ currentState;
public /*some type*/ previousState;
public void Update()
{
if (globalState != null)
{
globalState.Execute(owner); // PROBLEM 2
// IF GLOBAL STATE'S TYPE
// IS AN OBJECT, CANT CALL EXECUTE
// OBJECTS TYPE WILL BE KNOWN ONLY
// DURING RUNTIME
}
}
}
「守門員」,「FieldPlayer」和「Team」類型的每個對象都有一個狀態機實例。問題是...泛型不能成爲屬性。
我該怎麼辦?
我應該改變整個設計,如果是的話,怎麼樣? – Orvel 2013-03-25 15:12:12
它看起來不像你的抽象類需要是通用的。您可以使抽象類只是一個普通的對象,並在每個對象中實現該抽象類。然後,您可以將狀態類型屬性添加到您的FSM類。在閱讀更多內容之後,您實際上需要將State設置爲一個普通的Interface,因爲您在抽象類中沒有做基礎工作。 – 2013-03-25 15:15:24
@CalebKeith我將如何覆蓋具有不同參數的虛擬方法? – Orvel 2013-03-25 15:18:30