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

标签 c# .net class interface

<分区>

Possible Duplicate:
Why can't I use interface with explicit operator?

当我这样做时:

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

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

'ImageEditor.Effect.implicit operator ImageEditor.IEffect(ImageEditor.Effect)': user-defined conversions to or from an interface are not allowed.

为什么不允许?这不是一个好的做法吗?

最佳答案

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

虽然原因的总结是......

  • 转换运算符不应取代内置转换。允许这样做只会导致极其困惑的行为
  • 一般来说,无法确定到接口(interface)的隐式转换是否正在替换内置转换,因此它是不允许的

关于c# - 为什么 C# 不允许使用组合的类型对接口(interface)进行隐式转换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4854571/

相关文章:

c# - 如何在序列化期间忽略我不拥有的子类的属性?

c# - 选择返回真/假值的集合,而不是匹配条件的对象列表

c# - C# 中的 C++ 联合,它们在底层是如何工作的?

c++ - 错误 C2600 : what does this means?

c++ - std::pair 作为模板<class> 参数? C++

java - 为什么Java类文件 "typically (but not necessarily)"存储在一个文件中?

c# - WPF 应用程序,NotifyIcon(窗体)问题

c# - 无法在每个其他请求中创建 SSL/TLS 安全通道

c# - 我们在 GAC 中拥有同一程序集的两个版本?我希望我的客户选择哪个组件?

C# 从 Windows Azure 存储下载返回空文件,没有任何异常