Identification de l'héritage d'une classe générique en C #
La programmation orientée objet utilise l'héritage des classes pour créer des relations hiérarchiques. Les classes génériques de C # introduisent une couche de complexité lors de la détermination de l'héritage. Cet article relève le défi de vérifier si une classe est dérivée d'une classe générique.
Une approche commune utilisant IsSubclassOf
directement sur la définition de type générique échoue. La solution réside dans l'utilisation d'une méthode personnalisée, IsSubclassOfRawGeneric
, qui gère efficacement les comparaisons de type générique.
Voici la solution:
<code class="language-csharp">static bool IsSubclassOfRawGeneric(Type generic, Type toCheck) { while (toCheck != null && toCheck != typeof(object)) { Type cur = toCheck.IsGenericType ? toCheck.GetGenericTypeDefinition() : toCheck; if (generic == cur) { return true; } toCheck = toCheck.BaseType; } return false; }</code>
Cette fonction itère à travers la chaîne d'héritage de toCheck
(le type en cours de vérification). Pour chaque type, il obtient la définition de type générique en utilisant GetGenericTypeDefinition()
si le type est générique; Sinon, il utilise le type lui-même. La fonction le compare alors avec generic
(la définition de type générique pour vérifier). Une correspondance indique l'héritage de la classe générique spécifiée.
Cette méthode fournit une solution robuste pour déterminer si une classe hérite d'une classe générique en C #, surmontant les limites de la méthode standard IsSubclassOf
dans ce scénario 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!