-1
派生型(SuperCar)のオブジェクトを基本型(Car)のオブジェクトを受け入れるメソッドに渡しています。派生オブジェクト(SuperCar)にキャスト(Car)した後も、値は保持されます(プログラムは4を出力します)。基本クラスを受け入れるメソッドに派生オブジェクトを渡す
私がしていると思っていますダウンキャスティングなぜアップキャストは値を保持していますか?それはどのようにC#で呼び出されますか?
派生型(SuperCar)のオブジェクトを基本型(Car)のオブジェクトを受け入れるメソッドに渡しています。派生オブジェクト(SuperCar)にキャスト(Car)した後も、値は保持されます(プログラムは4を出力します)。基本クラスを受け入れるメソッドに派生オブジェクトを渡す
私がしていると思っていますダウンキャスティングなぜアップキャストは値を保持していますか?それはどのようにC#で呼び出されますか?
キャストはオブジェクトを変更しません。それはちょうどコンパイラがオブジェクトを参照する方法を変更しますオブジェクト。 SuperCar
からCar
にキャストするときに、「これはCar
です。」とコンパイラーに伝えるだけです。 " まだのSuperCar
ですが、実際にはコンパイラはを知っていませんです。
アップキャストとすると、 "this is a SuperCar
"とコンパイラに伝えられます。そうであれば、キャストはうまく動作します。 がではない場合、ランタイムは、それがそうでないタイプであると判断し、エラーをスローします。
これはまさに行われることです。 – Darek