неявный оператор с использованием интерфейсов

У меня есть общий класс, который яЯ пытаюсь реализовать неявное приведение типов для. Хотя это в основном работает, оно выигралот работа для интерфейса литья. После дальнейшего расследования я обнаружил, что есть ошибка компилятора: "Определяемое пользователем преобразование из интерфейса " это относится. Хотя я понимаю, что это должно применяться в некоторых случаях, что яЯ пытаюсь сделать это кажется законным делом.

Вот'Вот пример:

public class Foo where T : IBar
{
    private readonly T instance;

    public Foo(T instance)
    {
        this.instance = instance;
    }
    public T Instance
    {
        get { return instance; }
    }
    public static implicit operator Foo(T instance)
    {
        return new Foo(instance);
    }
}

Код для его использования:

var concreteReferenceToBar = new ConcreteBar();
IBar intefaceReferenceToBar = concreteReferenceToBar;
Foo concreteFooFromConcreteBar = concreteReferenceToBar;
Foo fooFromConcreteBar = concreteReferenceToBar;
Foo fooFromInterfaceBar = intefaceReferenceToBar; // doesn't work

Кто-нибудь знает обходной путь, или кто-то может удовлетворительно объяснить, почему я не долженне сможет разыгратьinterfaceReferenceToBar безоговорочноFoo, поскольку в моем случае он не конвертируется, а содержится только внутри Foo?

РЕДАКТИРОВАТЬ: Похоже, ковариация может предложить спасение. Позволять'Надеемся, что спецификация C # 4.0 допускает неявное приведение типов интерфейса с использованием ковариации.

Ответы на вопрос(1)

Ваш ответ на вопрос