C# でのベースから派生クラスへの明示的なキャスト: 実行時のリスク
C# で明示的なキャストを使用して基本クラス オブジェクトを派生クラス参照に直接割り当てると問題が発生し、通常は実行時例外が発生します。
この制限は、派生クラス参照の基本的な性質に起因します。 このような参照は本質的に、派生クラス型 (または null) のオブジェクトを期待します。 基本クラス オブジェクトを割り当てると、この期待に反し、予測できない動作が発生します。
次の例を考えてみましょう:
<code class="language-csharp">object o = new object(); string s = (string)o; // This will throw an InvalidCastException int i = s.Length; // Unreachable code</code>
無効なキャストの後に派生クラス (この場合は s.Length
) に固有のメンバーにアクセスしようとすることは不可能です。 o
が string
インスタンスを保持していないため、キャストは失敗します。
推奨される代替手段
基本型と派生型の間で変換する必要がある場合は、明示的なキャストを避けてください。代わりに、より安全な方法を採用してください:
派生型インスタンスの作成: 派生クラス オブジェクトをインスタンス化し、基本クラス オブジェクトのデータに基づいてそのプロパティを設定するメソッドを作成します。 このアプローチにより、型安全性と予測可能な動作が保証されます。
継承のリファクタリング: 継承階層を再評価します。 変換が頻繁に必要になる場合は、継承関係が最適に設計されていない可能性があります。 代替の設計パターンやクラスの再構築を検討してください。
直接キャストを避け、これらの代替手段を採用することで、コードの堅牢性が向上し、実行時エラーを防ぐことができます。
以上がC# で基本クラス オブジェクトを派生クラス参照に明示的にキャストできますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。