这些方法中哪一种更好或者它们相同?
Which one of these approaches is better or are they the same?
我想知道这两种FiniteStateMachine.AddState()
方法中哪一种比另一种更好,例如,一种需要unboxing/boxing吗?或者两者都需要 unboxing/boxing?如果其中任何一个比另一个更好,哪个更好?
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"));
}
由于 IState
是引用类型,您无法避免装箱,因此唯一的区别是装箱发生的位置。如果 TState
是一个值类型,它会在调用 allStates.Add
时发生,否则它会在调用 AddState
方法时发生。
我想知道这两种FiniteStateMachine.AddState()
方法中哪一种比另一种更好,例如,一种需要unboxing/boxing吗?或者两者都需要 unboxing/boxing?如果其中任何一个比另一个更好,哪个更好?
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"));
}
由于 IState
是引用类型,您无法避免装箱,因此唯一的区别是装箱发生的位置。如果 TState
是一个值类型,它会在调用 allStates.Add
时发生,否则它会在调用 AddState
方法时发生。