неявный оператор с использованием интерфейсов
У меня есть общий класс, который яЯ пытаюсь реализовать неявное приведение типов для. Хотя это в основном работает, оно выигралот работа для интерфейса литья. После дальнейшего расследования я обнаружил, что есть ошибка компилятора: "Определяемое пользователем преобразование из интерфейса " это относится. Хотя я понимаю, что это должно применяться в некоторых случаях, что яЯ пытаюсь сделать это кажется законным делом.
Вот'Вот пример:
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 допускает неявное приведение типов интерфейса с использованием ковариации.