の間に違いがあります:コンパイラはジェネリック型を解決できません。
public interface IPathfinding<T> where T : IPathfindingEntity
{
IEnumerable<T> GetShortestPath(IPathfindingUtils<IGraphNode<T>> utils);
}
と:
public interface IPathfinding<T> where T : IPathfindingEntity
{
IEnumerable<T> GetShortestPath(IPathfindingUtils<IGraphNode<IPathfindingEntity>> utils);
}
私はのように直感的に、私は例#でコンパイラエラーを受けていますまだあるはずのように、それはいないようです、私の頭を悩まだが1:
IGraphNode<T> cannot be used as parameter T in the generic type IPathfindingUtils<T>. There is no implicit reference conversion from IGraphNode<T> to IGraphNode<IPathfindingEntity>
は私がIGraphNode<T>
またはの定義を変更していませんここで、2つの例をコンパイルしようとしている間は、これらのインターフェースの定義である:
public interface IPathfindingUtils<T> where T : IGraphNode<IPathfindingEntity>
{
float Heuristic(T from, T to);
IEnumerable<T> CreatePath(T from);
}
public interface IGraphNode<T> : INode<T>, IComparable<IGraphNode<T>> where T : IComparable<T>
{
IList<float> Costs { get; }
}
共分散と反差別については、https://msdn.microsoft.com/en-us/library/dd799517(v=vs.110).aspx – Chris
を参照してください。前者の例と後者の例は異なります。前者ではTを渡された型として使用していますが、後者のTではテンプレートのみであり、知られていません。私は説明できることを願っています。 –
下記の私の答えを見て、自分の質問に答えてくれたら教えてください。 –