Cela va probablement être une réponse facile et je manque juste quelque chose, mais ici va ... Si j'ai un type, (c'est un System.Type réel ... pas une instance) comment puis-je dire si elle hérite d'un autre type de base spécifique?Comment déterminez-vous si un type donné (System.Type) hérite d'une classe de base spécifique (dans .Net)?
Répondre
Utilisez la méthode IsSubclassOf de la classe System.Type.
Cela fonctionnera-t-il également entre les interfaces? –
Pour les interfaces, il existe la méthode GetInterface – chakrit
Donc ... cela ne répond pas complètement à la question. Cela ne fonctionnerait pas si vous tapez une interface d'implémentation b –
EDIT: Notez que la solution ci-dessus échouera si le type de base que vous recherchez est une interface. La solution suivante fonctionnera pour tout type d'héritage, que ce soit la classe ou l'interface.
// Returns true if "type" inherits from "baseType"
public static bool Inherits(Type type, Type baseType) {
return baseType.IsAssignableFrom(type)
}
(semi) extrait utile du MSDN article:
vrai si [l'argument] et le type de courant représentent le même type, ou si le type de courant est dans la hiérarchie d'héritage de [l'argument ], ou si le Type en cours est une interface que [l'argument] implémente, ou si [l'argument] est un paramètre de type générique et le Type en cours représente l'une des contraintes de [l'argument]. false si aucune de ces conditions n'est vraie ou si [l'argument] est une référence null (Nothing en Visual Basic).
Oui, contrairement à Type.IsSubclassOf, cela fonctionne également sur les interfaces. –
Une chose à clarifier entre Type.IsSubTypeOf()
et Type.IsAssignableFrom()
:
IsSubType()
retourneratrue
que si le type donné est dérivé de du type spécifié. Il renverrafalse
si le type donné IS le type spécifié.IsAssignableFrom()
retourneratrue
si le type donné est soit du type spécifié ou dérivé du type spécifié.
Donc, si vous utilisez ces BaseClass
pour comparer et DerivedClass
(qui hérite de BaseClass
) puis:
BaseClassInstance.GetType.IsSubTypeOf(GetType(BaseClass)) = FALSE
BaseClassInstance.GetType.IsAssignableFrom(GetType(BaseClass)) = TRUE
DerivedClassInstance.GetType.IsSubTypeOf(GetType(BaseClass)) = TRUE
DerivedClassInstance.GetType.IsAssignableFrom(GetType(BaseClass)) = TRUE
Bien écrit. A m'a aidé :-) merci. –
En fait, DerivedClassInstance.GetType.IsAssignableFrom (GetType (BaseClass)) retournera FALSE. Vous devez l'appliquer dans l'autre sens: typeof (BaseClass) .IsAssignableFrom (typeof (DerivedClass)).En d'autres termes, vous ne pouvez pas faire ce qui suit: DerivedClass c = new BaseClass(); Quel est ce que IsAssignableFrom teste – jspaey
Si vous avez juste le type dans votre main. Comme 'propertyInfo.PropertyType' comment pouvez-vous déterminer si une interface implémentée à partir de ce type? IsAssignableFrom donne juste une compatibilité entre eux. Pour exciter un exemple plus clair, je n'ai pas pu trouver si un type est vraiment et exactement IList sur une liste de types. Ce pourrait être une autre chose conduite par IList. Cela devrait être un problème polymorphe. –
- 1. Comment obtenir l'assembly (System.Reflection.Assembly) pour un type donné dans .Net?
- 2. comment obtenir la valeur par défaut d'un type si le type est seulement connu comme System.Type?
- 3. Comment créer une classe qui hérite d'une autre et passe un paramètre de type dans CodeDom?
- 4. Comment supprimer un contrôle si ce n'est un type spécifique?
- 5. .NET: Comment vérifier le type dans une classe typée générique?
- 6. Comment déterminer si un type implémente un type d'interface générique spécifique
- 7. L'alternative de classe .NET 'Type' dans Delphi
- 8. .NET: Hérite de MyControl for Windows.Forms
- 9. Hérite de la classe de client Web
- 10. Déterminer si StructureMap a un type spécifique configuré?
- 11. La meilleure façon de vérifier si System.Type est un descendant d'une classe donnée
- 12. Comment savoir si une classe Java est un type primitif?
- 13. peut me dire si un rubis Wass de classe donnée définie dans un module donné
- 14. VB.NET Get system.type sous-jacent de type nullable
- 15. Obtention d'un System.Type à partir du nom partiel du type
- 16. Dans .NET, comment puis-je détecter si un utilisateur dispose d'un redistribuable spécifique?
- 17. Comment vérifier si un répertoire donné existe dans Ruby
- 18. Étant donné un type de classe comment créer une instance en Python?
- 19. Hérite d'une classe sur plusieurs modules?
- 20. WordPress - avoir un type spécifique de "page/post" comme "témoignage". Possible? Si c'est le cas, comment?
- 21. Comment détecter si un nombre donné est un nombre entier?
- 22. instancier une instance d'un assembly spécifié qui hérite d'une classe de base - apparemment problème très difficile
- 23. Comment utiliser l'opérateur "is" dans les variables System.Type?
- 24. Les génériques C# peuvent-ils avoir un type de base spécifique?
- 25. Comment utiliser JSON pour créer un objet qui hérite du type d'objet?
- 26. Détecter si le type d'un objet est un type défini par .NET Framework
- 27. Comment puis-je convertir un System.Type en sa version nullable?
- 28. Comment retourner un type générique via une méthode dans une classe de base?
- 29. asp.net MVC partiel avec dynamique hérite de la classe?
- 30. Comment tester si un arbre BSP donné est optimal?
Notez que la [Type.IsSubclassOf] (http://msdn.microsoft.com /en-us/library/system.type.issubclassof.aspx) La méthode ne fonctionne pas pour les types génériques! [** Jetez un oeil à cet article **] (http://www.pvladov.com/2012/05/get-all-derived-types-of-class.html) pour une implémentation de la méthode IsSubclassOf qui fonctionne pour les génériques aussi bien. –