c# – 如果从S到T存在一个身份转换,那么S和T是否相同?

在6.1.6.的C#语言规范,有:

The implicit reference conversions are:

(…)
From any reference-type to a reference-type T if it has an implicit identity or reference conversion to a reference-type T0 and T0 has an identity conversion to T.

他们为什么不这么说呢?

From any reference-type to a reference-type T if it has an implicit identity or reference conversion to T.

有没有什么事实的区别?

编辑:我意识到我错误的规范,错误可能是潜在的重要的问题(规范说“隐式参考转换是”而不是“隐式转换存在”)

If an identity conversion exists from S to T, must it be that S and T are same type?

由于在C#4.0中添加动态语言,您在规范中发现的奇怪性就出现了.在运行时没有动态的东西;相反,动态只是一种类型,意味着“我真的是对象;请延迟对程序的这一部分的分析直到运行时”.

因此,例如,List< object>之间存在身份转换.和列表<动态>.从C#编译器的角度来看,它们是不同的类型,因为myList [0] .Frob()会给出一个错误,而不是后者.但从运行时的角度来看,它们是一样的.因此,C#语言将转换从一个转换为另一个作为身份转换.在编译时,类型可能不同于C#语言的目的,但从运行时的角度来看,它们将是相同的.

翻译自:https://stackoverflow.com/questions/20935319/if-an-identity-conversion-exists-from-s-to-t-must-it-be-that-s-and-t-are-same-t

转载注明原文:c# – 如果从S到T存在一个身份转换,那么S和T是否相同?