ホームページ >バックエンド開発 >C++ >C# で自己型比較を含むサブクラスの関係を確実にチェックするにはどうすればよいですか?

C# で自己型比較を含むサブクラスの関係を確実にチェックするにはどうすればよいですか?

Susan Sarandon
Susan Sarandonオリジナル
2025-01-09 15:06:47847ブラウズ

How Can I Reliably Check for Subclass Relationships in C# Including Self-Type Comparisons?

自己型比較を含む、C# でのサブクラスの関係を確実にチェックします

C# で型が別の型のサブクラスであるかどうかを判断するには、IsSubclassOf を使用できます。

<code class="language-csharp">typeof(SubClass).IsSubclassOf(typeof(BaseClass)); // 返回 true</code>
ただし、このアプローチは、型とそれ自体の間のサブクラス関係をチェックするときに失敗します。

<code class="language-csharp">typeof(BaseClass).IsSubclassOf(typeof(BaseClass)); // 返回 false</code>
この制限を回避するには、いくつかのオプションがあります:

Type.IsAssignableFrom:

<code class="language-csharp">typeof(BaseClass).IsAssignableFrom(typeof(DerivedClass)); // 返回 true</code>
このメソッドはサブクラスに対して true を返しますが、次のような無関係な型に対しても誤検知を返します。

<code class="language-csharp">typeof(BaseClass).IsAssignableFrom(typeof(int[])); // 返回 true</code>

is and as (オブジェクト操作):

これらの演算子は型オブジェクトではなくオブジェクトを必要とするため、型定義の比較には使用できません:

<code class="language-csharp">// 无法编译:
SubClass is BaseClass

// 无法编译:
typeof(SubClass) is typeof(BaseClass)</code>

カスタムメソッド:

サブクラスの関係を正確に確認するために、ヘルパー メソッドを作成できます。

<code class="language-csharp">public static bool IsSameOrSubclass(Type potentialBase, Type potentialDescendant)
{
    return potentialDescendant.IsSubclassOf(potentialBase)
        || potentialDescendant == potentialBase;
}</code>
このメソッドは、サブクラス化と等価比較を正しく処理します。

以上がC# で自己型比較を含むサブクラスの関係を確実にチェックするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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