这些方法中哪一个更好或者它们是相同的?

时间:2016-03-23 16:02:42

标签: generics methods types interface unboxing

我想知道这两个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"));
}

1 个答案:

答案 0 :(得分:0)

由于IState是一个参考类型,你无法避免拳击,所以唯一的区别是拳击发生的地方。如果TState是值类型,则会在调用allStates.Add时发生,否则会在调用AddState方法时发生。