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)
这不行.为什么不允许?
我可以写出有必要的逻辑,特别是在从基础转换为派生的逻辑时.
编辑:更改了问题的标题
因为已经有一个隐含的转换,从Derived
到BaseClass
,而反之则没有任何意义.
关于后者:如果你的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#仅允许声明某些用户定义的转换.特别是,无法重新定义已存在的隐式或显式转换.
这说明由于两种兴趣转换已经由语言定义,因此您无法重新定义它们.