Maison > développement back-end > C++ > Comment puis-je déterminer avec précision si un type est un sous-type d'un autre en C# ?

Comment puis-je déterminer avec précision si un type est un sous-type d'un autre en C# ?

Barbara Streisand
Libérer: 2025-01-09 15:17:41
original
174 Les gens l'ont consulté

How Can I Accurately Determine if One Type Is a Subtype of Another in C#?

Une méthode efficace en C# pour déterminer avec précision si un type est un sous-type d'un autre type

Lorsque vous traitez des types en C#, vous devez souvent déterminer la relation entre les types. Un besoin courant est de vérifier si un type est une sous-classe d’un autre type, ou plus précisément, un sous-type de cette classe.

IsSubclassOf : Vérité partielle

La méthode

Type.IsSubclassOf permet de vérifier directement si un type est une sous-classe d'un autre type :

<code class="language-csharp">typeof(SubClass).IsSubclassOf(typeof(BaseClass)); // 返回 true</code>
Copier après la connexion

Cependant, cette approche échoue lorsque les deux types sont identiques :

<code class="language-csharp">typeof(BaseClass).IsSubclassOf(typeof(BaseClass)); // 返回 false</code>
Copier après la connexion

IsAssignableFrom : Plus large mais pas parfait

L'approche

Type.IsAssignableFrom résout ce problème, mais elle a aussi ses propres inconvénients. Bien qu'il indique avec précision qu'une sous-classe ou le même type est un sous-type, il peut également renvoyer des faux positifs pour des types non liés :

<code class="language-csharp">typeof(BaseClass).IsAssignableFrom(typeof(DerivedClass)); // 返回 true
typeof(BaseClass).IsAssignableFrom(typeof(BaseClass)); // 返回 true
typeof(int[]).IsAssignableFrom(typeof(uint[])); // 返回 true</code>
Copier après la connexion

est et comme : orienté objet mais avec des limites

Les mots-clés

is et as peuvent également être utilisés pour la vérification de type, mais ils agissent sur les instances d'objet plutôt que sur les types eux-mêmes. Cela limite leur applicabilité dans l’analyse de code statique.

Conclusion : Combiner les méthodes pour améliorer la précision

Malheureusement, aucune méthode intégrée ne capture pleinement le concept de vérification de sous-type sans introduire de faux résultats positifs ou nécessiter des références d'objet. Le moyen le plus fiable est de combiner la méthode Type.IsSubclassOf avec une vérification d'égalité explicite :

<code class="language-csharp">bool IsSameOrSubclass(Type potentialBase, Type potentialDescendant)
{
    return potentialDescendant.IsSubclassOf(potentialBase) || potentialDescendant == potentialBase;
}</code>
Copier après la connexion

Cette méthode personnalisée fournit un moyen concis et précis de déterminer si un type est un sous-type d'un autre type, y compris le cas du même type.

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal