这个问题已经在这里有了答案:




已关闭10年。






当我这样做时:

public struct Effect
{
    public IEffect IEffect { get; private set; }

    public Effect ( IEffect effect )
    {
        this.IEffect = effect;
    }

    public static implicit operator IEffect ( Effect effect )
    {
        return effect.IEffect;
    }

    public static explicit operator Effect ( IEffect effect )
    {
        return new Effect ( effect );
    }
}

我收到这样的编译器错误:



为什么不允许他们?这不是一个好习惯吗?

最佳答案

C#语言规范的10.10.3节对此进行了详细说明。

为什么的总结原因是...

  • 转换运算符不应替换内置转换。允许这样做只会导致极为困惑的行为
  • 通常,无法确定对接口(interface)的隐式转换是否正在替换内置转换,因此不允许使用
  • 关于c# - 为什么C#不允许使用合成的类型对接口(interface)进行隐式转换? [复制],我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4854571/

    10-12 04:36