簡単な質問があります。 null変数を型にキャストした場合。コンパイラが例外をスローすることを期待していますが、そうではありません。そして、私は本当にその理由を知りたいです。というのは
string sample1 = null as string;
string sample2 = (string)null;
object t1 = null;
TestClass t2 = (TestClass)t1;
オペレーターが例外処理を処理するため、おそらく最初のものです。ただし、他のサンプルは例外をスローする必要があります。コンパイラはこれらの状況をどのように処理しますか?おそらく変数がnullであるため、キャスト操作を実行しませんか?原因が実際にNULLポインターをキャストする場合、エラーでなければなりません。
ドキュメントによれば (明示的な変換)ベース型から派生型にキャストできます。
null
はすべての参照タイプに有効な値であるため、キャストルートが存在する限り問題ありません。
object
null→TestClass
nullは、object
がすべての参照型のスーパークラスであるように機能します。
ただし、string
null→TestClass
null(TestClass
がstring
のサブタイプではないと想定)を試してみると、コンパイルエラーがTestClass
は、string
の派生型ではありません。