繁体   English   中英

隐式算子转换和泛型

[英]Implicit Operator Conversion and Generics

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

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 >转换为IMyInterface2 ...嗯

您无法定义到接口的隐式转换。 因此,通用隐式操作对接口无效。 blackwasp.co.uk

您可能无法创建将类转换为已定义接口的运算符。 如果需要转换为接口,则该类必须实现该接口。

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

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

它与IMyInterface2是一个接口的事实有关,如果你替换它

public class MyClass2 : IMyInterface
{
}

它确实有效。

这是参考文献, 10.9.3

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM