私はこの単純なコードを持っています:
public interface IReader<out T>
{
IEnumerable<T> GetData();
}
このインターフェースはTで共変である必要があり、私はこのように使用しています:
private static Func<bool> MakeSynchroFunc<T>(IReader<T> reader) where T : IComposite
{
return () => Synchronize(reader);
}
TがICompositeを実装するための制約に注意してください。同期メソッドはIReader<IComposite>
入力を受け取ります:
private static bool Synchronize(IReader<IComposite> reader)
{
// ......
}
コンパイラーは、Tの制約とIReaderの共分散にもかかわらず、からIReader<T>
に変換できないと言っています。IReader<IComposite>
ここで私が間違っていることはありますか?コンパイラーは制約を検証できるはずであり、共分散は私IReader<T>
をとして使用させてくれるはずですよIReader<Icomposite>
ね?
ありがとう。