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 ?

Comment puis-je vérifier de manière fiable les relations de sous-classes en C#, y compris les comparaisons d'auto-types ?

Susan Sarandon
Susan Sarandonoriginal
2025-01-09 15:06:47844parcourir

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

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn