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
234 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 :

typeof(SubClass).IsSubclassOf(typeof(BaseClass)); // 返回 true
Copier après la connexion

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

typeof(BaseClass).IsSubclassOf(typeof(BaseClass)); // 返回 false
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 :

typeof(BaseClass).IsAssignableFrom(typeof(DerivedClass)); // 返回 true
typeof(BaseClass).IsAssignableFrom(typeof(BaseClass)); // 返回 true
typeof(int[]).IsAssignableFrom(typeof(uint[])); // 返回 true
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 :

bool IsSameOrSubclass(Type potentialBase, Type potentialDescendant)
{
    return potentialDescendant.IsSubclassOf(potentialBase) || potentialDescendant == potentialBase;
}
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!

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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal