为什么这种转换不起作用?
public interface IMyInterface
{
}
public interface IMyInterface2 : IMyInterface
{
}
public class MyContainer<T> where T : IMyInterface
{
public T MyImpl {get; private set;}
public MyContainer()
{
MyImpl = Create<T>();
}
public static implicit T (MyContainer<T> myContainer)
{
return myContainer.MyImpl;
}
}
当我使用我的类时,它会导致编译时错误:
IMyInterface2 myImpl = new MyContainer<IMyInterface2>();
无法转换为MyContainer <IMyInterface2
&gt;到IMyInterface2 ...嗯...
答案 0 :(得分:5)
您无法定义到接口的隐式转换。因此,通用隐式操作对接口无效。见blackwasp.co.uk
您可能无法创建将类转换为已定义接口的运算符。如果需要转换为接口,则该类必须实现接口。
您可能只需编写以下内容,而不使用隐式魔法:
IMyInterface2 myImpl = new MyContainer<IMyInterface2>().MyImpl;
答案 1 :(得分:3)