背景:
假设我有以下类:
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
语句中的类型转换失败了。虽然我可以直接将new X()
分配给wrappedIX
,但我不能将任何类型为IX
的内容分配给它。编译器将抱怨以下错误:
编译器错误CS0266:无法隐式地将类型“IX”转换为“Wrapped<IX>”。存在显式转换(是否缺少转换?)
我不明白这是什么问题。这里有什么问题?