ホームページ > バックエンド開発 > C++ > C# で基本クラス オブジェクトを派生クラス参照に明示的にキャストできますか?

C# で基本クラス オブジェクトを派生クラス参照に明示的にキャストできますか?

Linda Hamilton
リリース: 2025-01-18 12:13:14
オリジナル
416 人が閲覧しました

Can a Base Class Object Be Explicitly Cast to a Derived Class Reference in C#?

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) に固有のメンバーにアクセスしようとすることは不可能です。 ostring インスタンスを保持していないため、キャストは失敗します。

推奨される代替手段

基本型と派生型の間で変換する必要がある場合は、明示的なキャストを避けてください。代わりに、より安全な方法を採用してください:

  • 派生型インスタンスの作成: 派生クラス オブジェクトをインスタンス化し、基本クラス オブジェクトのデータに基づいてそのプロパティを設定するメソッドを作成します。 このアプローチにより、型安全性と予測可能な動作が保証されます。

  • 継承のリファクタリング: 継承階層を再評価します。 変換が頻繁に必要になる場合は、継承関係が最適に設計されていない可能性があります。 代替の設計パターンやクラスの再構築を検討してください。

直接キャストを避け、これらの代替手段を採用することで、コードの堅牢性が向上し、実行時エラーを防ぐことができます。

以上がC# で基本クラス オブジェクトを派生クラス参照に明示的にキャストできますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート