Comment puis-je réfléchir sur les interfaces implémentées par un type donné (de classe ou d'interface) dans .NET? Comme le type reflété sera générique (aussi bien dans le sens de l'implémentation que dans le sens sémantique), il serait préférable de le faire sans avoir à coder en dur un nom d'assemblage, même si je me rends compte que je peux obtenir ce nom de la classe Type d'un type donné.Réflexion sur les interfaces d'un type en C#
Répondre
Appelez Type.GetInterfaces(). Type.GetInterfaces() ne vous obtient que interfaces déclarées (MSDN doit avoir la documentation qui explique cela)
Pour obtenir des interfaces héritées, vous devez faire le travail vous-même. Quelque chose similaire à:
using System;
using System.Linq;
public static IEnumerable<Type> GetAllInterfacesForType(this Type type)
{
foreach (var interfaceType in type.GetInterfaces())
{
yield return interfaceType;
foreach (var t in interfaceType.GetAllInterfacesForType())
yield return t;
}
}
public static IEnumerable<Type> GetUniqueInterfacesForType(this Type type)
{ return type.GetAllInterfaces().Distinct(); }
J'ai écrit ce le brassard de désolé si elle ne compile pas droit-outta-da-box.
Je ne pense pas que ce soit correct. De retour MSDN pour GetInterfaces() est: Type: array
MSDN est correct. GetInterfaces renvoie les interfaces héritées des types de base ainsi que les interfaces déclarées sur le type en cours. – itowlson
Encore une fois, et vous ne me croirez pas jusqu'à ce que vous l'essayiez vous-même, mais cela signifie quand même que ce sont seulement ceux qui sont DÉCLARÉS dans la classe. Lisez les commentaires à cet article sur MSDN. –
- 1. Le bon type pour les poignées dans les interfaces C
- 2. Interfaces fluides en C#
- 3. utilisant la réflexion pour trouver des interfaces mises en œuvre
- 4. question sur les interfaces java
- 5. Cette réflexion est-elle précise sur les interfaces ESB vs. REST?
- 6. sérialisation XML vs réflexion en C#
- 7. Avoir des problèmes dans les interfaces C#
- 8. Attribut C# PropertyType Réflexion
- 9. Réflexion - réglage Type d'obj retourné?
- 10. Propriétés de tronçon Autocreate pour les interfaces en C#?
- 11. Easy Réflexion question C#
- 12. nouveau mot dans les interfaces dans C#
- 13. C# Réflexion et génériques
- 14. Récupération des interfaces de feuille d'un type
- 15. UDP-Diffusion sur toutes les interfaces
- 16. C# - Événements et Interfaces
- 17. restrictions et interfaces variables de type générique
- 18. C# objet de réflexion [] question
- 19. Pourquoi le compilateur C# déclare-t-il explicitement toutes les interfaces implémentées par un type?
- 20. Réflexion Python et conversion de type
- 21. Problème de réflexion C#
- 22. interfaces pour les classes modèles
- 23. Propriétés indexées par réflexion C#
- 24. Comment appeler les événements dans les interfaces C#?
- 25. Différences entre les interfaces Java et les protocoles Objective-C?
- 26. C#: Valeur Obtenir par réflexion
- 27. Problème dans Interfaces (polymorphisme) C#
- 28. Où déclarer les interfaces?
- 29. C# Réflexion: Trouver des attributs sur un champ membre
- 30. Transmettre au type générique en C#
Maintenant, ce serait trop simple;) Merci. – johnc