【发布时间】:2011-02-01 07:59:00
【问题描述】:
背景:
假设我有以下课程:
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 plainIX = new X();”可编译用“X plainIX = new X();”
标签: c# generics type-conversion implicit-conversion