我想知道这两个FiniteStateMachine.AddState()
方法中哪一个比另一个更好,例如,是否需要拆箱/装箱?或两者都需要拆箱/装箱?如果它们中的任何一个比另一个好,哪一个?
public interface IState
{
string Name { get; set; }
}
public sealed class FiniteStateMachine
{
private Dictionary<string, IState> allStates = new Dictionary<string, IState>();
public void AddState<TState>(TState newState) where TState : IState
{
allStates.Add(newState.Name, newState);
}
public void AddState(IState newState)
{
allStates.Add(newState.Name, newState);
}
}
public class EnemySoldierSword_TakingHitState : IState
{
public string Name { get; set; }
public EnemySoldierSword_TakingHitState(string name)
{
Name = name;
}
}
public class Program
{
public var FSM = new FiniteStateMachine();
FSM.AddState(new EnemySoldierSword_ChasingState("ChasingState"));
}
答案 0 :(得分:0)
由于IState
是一个参考类型,你无法避免拳击,所以唯一的区别是拳击发生的地方。如果TState
是值类型,则会在调用allStates.Add
时发生,否则会在调用AddState
方法时发生。