У меня есть простой код:
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
:
private static bool Synchronize(IReader<IComposite> reader)
{
// ......
}
Компилятор говорит мне, что не может преобразовать из IReader
в IReader
. несмотря на ограничение на T и ковариантность IReader.
Я что-то делаю не так?
Компилятор должен иметь возможность проверить ограничение, а ковариация должна позволить мне использовать мой IReader
как IReader
, не так ли?
Спасибо.