自己型比較を含む、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 サイトの他の関連記事を参照してください。