为什么我不能将一个隐式运算符从Base类写入C#中的Derived类?

Sté*_*ane 5 c# operators

public class Derived : BaseClass
{
    public Derived(string name) : base(name) {}

    public static implicit operator BaseClass(Derived derived)
    {
        return new BaseClass(derived.ColorHex);
    }

    public static implicit operator Derived(BaseClass baseclass)
    {
        return new Derived(baseclass.name);
    }
}
Run Code Online (Sandbox Code Playgroud)

这不行.为什么不允许?
可以写出有必要的逻辑,特别是在从基础转换为派生的逻辑时.

编辑:更改了问题的标题

Jon*_*Jon 8

因为已经有一个隐含的转换,从DerivedBaseClass,而反之则没有任何意义.

关于后者:如果你的Base对象意味着可以隐式转换为Derived- 为什么它们Derived首先不是对象?

标准的强制性引用:

6.1.6隐式参考转换

隐式引用转换是:

  • [...]
  • 从任何类型S到任何类型类型T,只要S来自T.

这表示存在隐式转换Derived=> Base,我们都知道.

6.2.4显式引用转换

显式引用转换是:

  • [...]
  • 从任何类型S到任何类型类型T,只要S是T的基类.
  • [...]

这表示已经有一个显式转换Base=> Derived(这是允许您在运行时尝试向下转换的原因).

6.4.1允许的用户定义转换

C#仅允许声明某些用户定义的转换.特别是,无法重新定义已存在的隐式或显式转换.

这说明由于两种兴趣转换已经由语言定义,因此您无法重新定义它们.

  • 因为它们来自例如我无法控制的地方。 (2认同)