我有一個(gè)通用類,我正在嘗試為其實(shí)現(xiàn)隱式類型轉(zhuǎn)換。雖然大多數(shù)情況下都可以使用,但不適用于界面投射。經(jīng)過進(jìn)一步調(diào)查,我發(fā)現(xiàn)有一個(gè)編譯器錯(cuò)誤:“適用于用戶定義的接口轉(zhuǎn)換”。雖然我知道應(yīng)該在某些情況下強(qiáng)制執(zhí)行,但是我想做的事情似乎是合理的情況。這是一個(gè)例子:public class Foo<T> 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>(T instance) { return new Foo<T>(instance); }}使用它的代碼:var concreteReferenceToBar = new ConcreteBar();IBar intefaceReferenceToBar = concreteReferenceToBar;Foo<ConcreteBar> concreteFooFromConcreteBar = concreteReferenceToBar;Foo<IBar> fooFromConcreteBar = concreteReferenceToBar;Foo<IBar> fooFromInterfaceBar = intefaceReferenceToBar; // doesn't work有誰知道解決方法,或者有人可以用令人滿意的方式解釋為什么我應(yīng)該interfaceReferenceToBar隱式轉(zhuǎn)換為Foo<IBar>,因?yàn)樵谖铱磥恚鼪]有被轉(zhuǎn)換,而僅包含在Foo中?編輯: 看起來協(xié)方差可能提供救贖。我們希望C#4.0規(guī)范允許使用協(xié)方差隱式轉(zhuǎn)換接口類型。
使用接口的隱式運(yùn)算符
慕田峪4524236
2019-11-20 13:13:00