détecter si le type en C # hérite du type génétique
Dans la programmation, la relation entre les classes (particulièrement impliquée dans l'héritage) est généralement nécessaire. Cependant, lors du traitement de la classe générique avec des paramètres de type, il peut être difficile de vérifier l'héritage par des méthodes standard.
Question:
En supposant que vous avez les génériques et les dérivés suivants:
Vous souhaitez vérifier si l'objet de type donné (par exemple,
) indique le type d'héritage de<code class="language-csharp">public class GenericClass<T> : GenericInterface<T> { } public class Test : GenericClass<SomeType> { }</code>
échouera car elle ne tient pas compte des paramètres génériques. typeof(Test)
GenericClass
Solution: typeof(Test).IsSubclassOf(typeof(GenericClass))
Afin de résoudre ce problème, vous pouvez utiliser le code suivant pour déterminer si le type est dérivé du type génétique:
Cette méthode détermine siest directement ou indirectement hérité de
en traversant la chaîne d'héritage et en comparant le type de base. Il traite les types non génériques et génériques en vérifiant la présence des attributs et en récupérant la définition des types génériques.<code class="language-csharp">static bool IsSubclassOfRawGeneric(Type generic, Type toCheck) { while (toCheck != null && toCheck != typeof(object)) { var cur = toCheck.IsGenericType ? toCheck.GetGenericTypeDefinition() : toCheck; if (generic == cur) { return true; } toCheck = toCheck.BaseType; } return false; }</code>
Grâce à cette méthode, vous pouvez déterminer avec précision si le type est dérivé du type génétique, quel que soit le paramètre de type spécifié. toCheck
generic
Exemple: IsGenericType
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!