2009-04-18 6 views
0

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

1

Appelez Type.GetInterfaces(). Type.GetInterfaces() ne vous obtient que interfaces déclarées (MSDN doit avoir la documentation qui explique cela)

+0

Maintenant, ce serait trop simple;) Merci. – johnc

1

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.

+0

Je ne pense pas que ce soit correct. De retour MSDN pour GetInterfaces() est: Type: array []() [] Un tableau d'objets Type représentant toutes les interfaces implémentées ou héritées par le Type en cours. – tylerl

+0

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

+0

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. –