Maison >développement back-end >C++ >Comment puis-je vérifier de manière fiable les relations de sous-classes en C#, y compris les comparaisons d'auto-types ?
Vérifiez de manière fiable les relations entre les sous-classes en C#, y compris les comparaisons d'auto-types
Pour déterminer si un type est une sous-classe d'un autre type en C#, vous pouvez utiliser IsSubclassOf
:
<code class="language-csharp">typeof(SubClass).IsSubclassOf(typeof(BaseClass)); // 返回 true</code>
Cependant, cette approche échoue lors de la vérification de la relation de sous-classe entre le type et lui-même :
<code class="language-csharp">typeof(BaseClass).IsSubclassOf(typeof(BaseClass)); // 返回 false</code>
Pour contourner cette limitation, plusieurs options existent :
Type.IsAssignableFrom :
<code class="language-csharp">typeof(BaseClass).IsAssignableFrom(typeof(DerivedClass)); // 返回 true</code>
Bien que cette méthode renvoie vrai pour les sous-classes, elle fournit également des faux positifs pour des types non liés, par exemple :
<code class="language-csharp">typeof(BaseClass).IsAssignableFrom(typeof(int[])); // 返回 true</code>
est et comme (opérations sur les objets) :
Ces opérateurs nécessitent des objets plutôt que des objets de type et ne peuvent pas être utilisés pour comparer des définitions de type :
<code class="language-csharp">// 无法编译: SubClass is BaseClass // 无法编译: typeof(SubClass) is typeof(BaseClass)</code>
Méthode personnalisée :
Afin de vérifier avec précision la relation entre les sous-classes, vous pouvez créer une méthode d'assistance :
<code class="language-csharp">public static bool IsSameOrSubclass(Type potentialBase, Type potentialDescendant) { return potentialDescendant.IsSubclassOf(potentialBase) || potentialDescendant == potentialBase; }</code>
Cette méthode gère correctement les comparaisons de sous-classement et d'égalité.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!