12

6.1.6。C# 言語仕様には、次のものがあります。

暗黙の参照変換は次のとおりです。

(...)
参照型 T0 への暗黙の同一性または参照変換があり、T0 が T への同一性変換を持っている場合、任意の参照型から参照型 T へ。

代わりに、もっと簡単に言ってみませんか。

T への暗黙の同一性または参照変換がある場合、任意の参照型から参照型 T へ。

事実上の違いはありますか?

編集:仕様のタイプミスに気付きました。エラーは質問にとって重要である可能性があります(仕様には、「暗黙の変換が存在する」ではなく「暗黙の参照変換はある」と記載されています)

4

1 に答える 1

12

S から T への恒等変換が存在する場合、S と T は同じ型である必要がありますか?

仕様で発見した奇妙な点はdynamic、C# 4.0 で言語に追加した結果として生じました。実行時には、次のようなものはありませんdynamic。むしろ、dynamic「私は本当にobject; プログラムのこの部分の分析を実行時まで延期してください」という意味の型です。

したがって、たとえば、との間に恒等変換があります。C# コンパイラの観点からは、前者ではエラーが発生しますが後者では発生しないため、それらは異なる型です。しかし、ランタイムの観点からは、それらは同一です。したがって、C# 言語では、一方から他方への変換を ID 変換として分類します。コンパイル時には、C# 言語の目的で型が異なっていてもかまいませんが、ランタイムの観点からは同じになります。List<object>List<dynamic>myList[0].Frob()

于 2014-01-05T16:14:04.920 に答える