Maison >développement back-end >C++ >Comment puis-je déterminer si une classe hérite d'une classe générique dans .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>
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>
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!