为什么C#不允许使用组合的类型对接口进行隐式转换?

Joa*_*nge 6 .net c# interface class

可能重复:
为什么我不能使用带显式运算符的接口?

当我这样做:

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 );
    }
}
Run Code Online (Sandbox Code Playgroud)

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

'ImageEditor.Effect.implicit operator ImageEditor.IEffect(ImageEditor.Effect)':不允许在接口之间进行用户定义的转换.

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

Jar*_*Par 7

这在C#语言规范的第10.10.3节中有详细说明.

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

  • 转换运算符不应取代内置转换.允许这只会导致极其混乱的行为
  • 通常,无法确定对接口的隐式转换是否正在替换内置转换,因此不允许