在 6.1.6 中。 C#语言规范中有:
隐式引用转换为:
(...)
从任何引用类型到引用类型 T,如果它具有到引用类型 T0 的隐式标识或引用转换,并且 T0 具有到 T 的标识转换。
他们为什么不直接说:
从任何引用类型到引用类型 T(如果它具有到 T 的隐式标识或引用转换)。
是否有任何事实差异?
编辑:我意识到我输错了规范,并且该错误可能对问题很重要(规范说“隐式引用转换是”而不是“存在隐式转换”)
如果存在从 S 到 T 的恒等转换,那么 S 和 T 一定是同一类型吗?
您在规范中发现的奇怪现象是由于添加了dynamic
到 C# 4.0 中的语言。在运行时不存在这样的事情dynamic
;相当,dynamic
只是一种表示“我真的object
;请将程序这部分的分析推迟到运行时”。
因此有一个身份转换之间,比如说,List<object>
and List<dynamic>
。从 C# 编译器的角度来看,它们是不同的类型,因为myList[0].Frob()
前者会出错,但后者不会出错。但从运行时的角度来看,它们是相同的。因此,C# 语言将从一种到另一种的转换归类为标识转换。在编译时,对于 C# 语言来说,类型可以不同,但从运行时的角度来看,它们将是相同的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)