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

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

Susan Sarandon
リリース: 2025-01-09 15:06:47
オリジナル
850 人が閲覧しました

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

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

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

typeof(SubClass).IsSubclassOf(typeof(BaseClass)); // 返回 true
ログイン後にコピー
ただし、このアプローチは、型とそれ自体の間のサブクラス関係をチェックするときに失敗します。

typeof(BaseClass).IsSubclassOf(typeof(BaseClass)); // 返回 false
ログイン後にコピー
この制限を回避するには、いくつかのオプションがあります:

Type.IsAssignableFrom:

typeof(BaseClass).IsAssignableFrom(typeof(DerivedClass)); // 返回 true
ログイン後にコピー
このメソッドはサブクラスに対して true を返しますが、次のような無関係な型に対しても誤検知を返します。

typeof(BaseClass).IsAssignableFrom(typeof(int[])); // 返回 true
ログイン後にコピー

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

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

// 无法编译:
SubClass is BaseClass

// 无法编译:
typeof(SubClass) is typeof(BaseClass)
ログイン後にコピー

カスタムメソッド:

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

public static bool IsSameOrSubclass(Type potentialBase, Type potentialDescendant)
{
    return potentialDescendant.IsSubclassOf(potentialBase)
        || potentialDescendant == potentialBase;
}
ログイン後にコピー
このメソッドは、サブクラス化と等価比較を正しく処理します。

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

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