C# の基本クラス オブジェクトを派生クラス参照に直接割り当てることはできますか?
C# などのオブジェクト指向プログラミング言語では、クラスの継承によりクラス間の親子関係が確立され、派生クラスは基本クラスのプロパティとメソッドを継承します。ここで疑問が生じます。明示的な型変換を使用して、基本クラス オブジェクトを派生クラス参照に直接割り当てることができるのでしょうか?
多くのプログラマは、クラス階層内で型変換に型キャストを使用しようとすると、この問題に遭遇します。ただし、このタイプの代入は C# では許可されていないことを理解することが重要です。その理由は、クラス参照の固有の性質と、クラス参照が表す実際のオブジェクトとの関係にあります。
オブジェクト指向プログラミングでは、参照はメモリ内の実際のオブジェクトへのポインタです。派生クラス参照は、派生クラス インスタンスへのポインターを保持します。基本クラス オブジェクトを派生クラス参照に割り当てるということは、派生クラスが予期するすべてのプロパティとメソッドを持たないオブジェクトを参照が指すことを意味します。これにより、実行時エラーや予期しない動作が発生する可能性があります。
次の例を考えてみましょう:
<code class="language-csharp">class Animal { public void Eat() { } } class Dog : Animal { public void Bark() { } } Animal animal = new Animal(); Dog dog = (Dog)animal; // 错误:InvalidCastException</code>
ここで、基本クラス オブジェクトのanimalを派生クラス参照のdogに割り当てようとすると、InvalidCastExceptionが発生します。これは、animalオブジェクトにはDogクラスに存在するBark()メソッドがないためです。
正しい型互換性を実現するには、派生クラス参照によって参照されるオブジェクトが実際に派生クラスのインスタンスであることを確認する必要があります。これは、基本クラス オブジェクトを派生クラス参照に変換するのではなく、派生クラスのインスタンスを作成し、それを参照に割り当てることで実現できます。
以上がC# で基本クラス オブジェクトを派生クラス参照に直接割り当てることはできますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。