背景:
假设我有以下课程:
class Wrapped<T> : IDisposable
{
public Wrapped(T obj) { /* ... */ }
public static implicit operator Wrapped<T>(T obj)
{
return new Wrapped<T>(obj);
}
public void Dispose() { /* ... */ }
}
如您所见,它为T
→提供了一个隐式类型转换运算符Wrapped<T>
。最终,我希望能够按如下方式使用此类:
interface IX { /* ... */ }
class X : IX { /* ... */ }
...
IX plainIX = new X();
using (Wrapped<IX> wrappedIX = plainIX)
{
/* ... */
}
问题:
但是,上述using
子句中的类型转换失败。虽然我可以将 anew X()
直接分配给wrappedIX
,但我不能给它分配任何类型IX
的东西。编译器将抱怨以下错误:
编译器错误 CS0266:无法将类型“IX”隐式转换为“Wrapped<IX>”。存在显式反转(您是否缺少演员表?)
我不明白这一点。这里有什么问题?