.NET Covariance

У меня есть простой код:

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, не так ли?

Спасибо.

9
задан dou bret 20 June 2012 в 01:25
поделиться