为什么这种转换不起作用?

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;
     }
}

当我使用我的类(class)时,会导致编译时错误:
IMyInterface2 myImpl = new MyContainer<IMyInterface2>();

无法从MyContainer的<IMyInterface2>转换为IMyInterface2 ... hmmmm

最佳答案

您不能定义对接口(interface)的隐式转换。因此,您的通用隐式操作对于接口(interface)将无效。参见blackwasp.co.uk



您可能只需要结束编写以下内容,而无需隐式魔术:

IMyInterface2 myImpl = new MyContainer<IMyInterface2>().MyImpl;

关于c# - 隐式运算符转换和泛型,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2124756/

10-10 16:16