Maison > développement back-end > C++ > Comment puis-je déterminer si une classe hérite d'une classe générique dans .NET?

Comment puis-je déterminer si une classe hérite d'une classe générique dans .NET?

DDD
Libérer: 2025-01-24 18:51:10
original
973 Les gens l'ont consulté

How Can I Determine if a Class Inherits from a Generic Class in .NET?

Identification de l'héritage des classes génériques dans .NET

Le mécanisme d'héritage de

.NET permet aux classes d'étendre les fonctionnalités des classes de base. Les classes génériques ajoutent une couche de complexité lors de la détermination de l'héritage, en particulier lorsqu'ils traitent des objets Type. La méthode standard IsSubclassOf n'est pas suffisante lorsque la classe de base est générique.

Le défi:

Considérez cet exemple:

<code class="language-csharp">public class GenericClass<T> : IGenericInterface<T> { }

public class TestClass : GenericClass<string> { }</code>
Copier après la connexion

La vérification simplement typeof(TestClass).IsSubclassOf(typeof(GenericClass<string>)) ne fonctionnera pas car typeof(GenericClass<string>) est un type générique fermé, pas la définition de type générique.

La solution:

La fonction d'assistance suivante détermine efficacement si un type hérite d'un RAW Définition de type générique:

<code class="language-csharp">static bool IsSubclassOfRawGeneric(Type genericType, Type toCheck) {
    while (toCheck != null && toCheck != typeof(object)) {
        Type currentType = toCheck.IsGenericType ? toCheck.GetGenericTypeDefinition() : toCheck;
        if (genericType == currentType) {
            return true;
        }
        toCheck = toCheck.BaseType;
    }
    return false;
}</code>
Copier après la connexion

Cette fonction itère à travers les types de base de toCheck jusqu'à ce qu'il atteigne object. Pour chaque type, il vérifie s'il s'agit d'un type générique. Si c'est le cas, il obtient la définition de type générique en utilisant GetGenericTypeDefinition(). La fonction compare ensuite cette définition de type générique brut avec le genericType fourni. Une correspondance confirme l'héritage du type générique brut.

Cette approche identifie correctement l'héritage des classes génériques, surmontant les limites de la méthode standard IsSubclassOf dans ce scénario. Vous pouvez utiliser cette fonction pour déterminer de manière fiable si un objet Type représente une classe dérivée d'une classe générique spécifique.

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