ホームページ >バックエンド開発 >C++ >C# で基本クラス オブジェクトを派生クラス参照に安全に型キャストする方法

C# で基本クラス オブジェクトを派生クラス参照に安全に型キャストする方法

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2025-01-18 12:18:09781ブラウズ

How to Safely Typecast Base Class Objects to Derived Class References in C#?

C# での基本クラス オブジェクトの派生クラス参照への安全な型キャスト

C# で基本クラス オブジェクトを派生クラス参照に直接キャストするのは危険であり、多くの場合、実行時例外が発生します。 これは、派生クラス参照が独自​​の型または null のオブジェクトを想定しているためです。

具体的な例:

<code class="language-csharp">object o = new object();
string s = (string)o; // This will throw an exception at runtime</code>

この安全でないキャストの後に派生クラスのメンバーにアクセスしようとすると、エラーが発生します:

<code class="language-csharp">int i = s.Length; // Runtime exception: InvalidCastException</code>

o 変数は基本クラス オブジェクトを保持しますが、Length のような派生クラス メンバーとは互換性がありません。

実行時エラーを防ぐために、キャストする前にオブジェクトの実際の型を必ず確認してください。 is 演算子とパターン マッチングは、安全な代替手段を提供します。

<code class="language-csharp">object o = new object();
if (o is string str) {
    int i = str.Length; // Safe access to Length
} else {
    // Handle the case where o is not a string
}

// Or using pattern matching:
if (o is string s2)
{
    int length = s2.Length;
}</code>

あるいは、クラス設計を再評価してください。基本クラスと派生クラスの間で頻繁にキャストが必要な場合は、継承階層に欠陥があることを示している可能性があります。 多くの場合、そのようなキャストの必要性を排除するリファクタリングがより良い解決策となります。 必要に応じて、継承の代わりにインターフェースまたは合成の使用を検討してください。

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

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。