ホームページ > バックエンド開発 > C++ > C# で、ある型が別の型のサブタイプであるかどうかを正確に判断するにはどうすればよいですか?

C# で、ある型が別の型のサブタイプであるかどうかを正確に判断するにはどうすればよいですか?

Barbara Streisand
リリース: 2025-01-09 15:17:41
オリジナル
125 人が閲覧しました

How Can I Accurately Determine if One Type Is a Subtype of Another in C#?

型が別の型のサブタイプであるかどうかを正確に判断する C# の効果的な方法

C# で型を扱う場合、多くの場合、型間の関係を判断する必要があります。一般的なニーズは、ある型が別の型のサブクラスであるかどうか、より正確にはそのクラスのサブタイプであるかどうかを確認することです。

IsSubclassOf: 部分的な真実

Type.IsSubclassOf メソッドは、型が別の型のサブクラスであるかどうかを直接チェックする方法を提供します。

<code class="language-csharp">typeof(SubClass).IsSubclassOf(typeof(BaseClass)); // 返回 true</code>
ログイン後にコピー
ただし、2 つのタイプが同じ場合、このアプローチは失敗します。

<code class="language-csharp">typeof(BaseClass).IsSubclassOf(typeof(BaseClass)); // 返回 false</code>
ログイン後にコピー

IsAssignableFrom: 範囲は広いですが完璧ではありません

アプローチはこの問題を解決しますが、独自の欠点もあります。これは、サブクラスまたは同じ型がサブタイプであることを正確に示しますが、無関係な型に対して誤検知を返す場合もあります: Type.IsAssignableFrom

<code class="language-csharp">typeof(BaseClass).IsAssignableFrom(typeof(DerivedClass)); // 返回 true
typeof(BaseClass).IsAssignableFrom(typeof(BaseClass)); // 返回 true
typeof(int[]).IsAssignableFrom(typeof(uint[])); // 返回 true</code>
ログイン後にコピー

はオブジェクト指向ですが、制限があります

および is キーワードは型チェックにも使用できますが、型自体ではなくオブジェクト インスタンスに作用します。これにより、静的コード分析での適用性が制限されます。 as

結論: 方法を組み合わせて精度を向上させる

残念ながら、誤検知の結果をもたらしたり、オブジェクト参照を要求したりすることなく、サブタイプ チェックの概念を完全に捉えている組み込みメソッドは 1 つもありません。最も信頼性の高い方法は、

メソッドと明示的な等価性チェックを組み合わせることです。 Type.IsSubclassOf

<code class="language-csharp">bool IsSameOrSubclass(Type potentialBase, Type potentialDescendant)
{
    return potentialDescendant.IsSubclassOf(potentialBase) || potentialDescendant == potentialBase;
}</code>
ログイン後にコピー
このカスタム メソッドは、同じ型の場合も含め、ある型が別の型のサブタイプであるかどうかを判断するための簡潔かつ正確な方法を提供します。

以上がC# で、ある型が別の型のサブタイプであるかどうかを正確に判断するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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