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);
}
}
这行不通。为什么不允许?
I can可能会编写使其有意义所需的逻辑,尤其是从基数转换为派生数时。
编辑:更改了问题的标题
因为已经存在隐式转换Derived
to BaseClass
,反之则没有任何意义。
关于后者:如果您Base
对象可以隐式转换为Derived
——为什么他们不呢?Derived
首先是对象?
强制性报价standard http://www.ecma-international.org/publications/standards/Ecma-334.htm:
6.1.6 隐式引用转换
隐式引用转换为:
- [...]
- 从任何类类型 S 到任何类类型 T,前提是 S 是
源自 T。
这表示存在隐式转换Derived
=> Base
,众所周知。
6.2.4 显式引用转换
显式引用转换为:
- [...]
- 从任何类类型 S 到任何类类型 T,前提是 S 是 T 的基类。
- [...]
这表示已经有显式转换Base
=> Derived
(这允许您在运行时尝试向下转型)。
6.4.1 允许的用户定义转换
C# 只允许声明某些用户定义的转换。在
特别是,不可能重新定义已经存在的
隐式或显式转换。
这表明,由于两种感兴趣的转换已经由语言定义,因此您无法重新定义它们。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)