2009-04-18 7 views
0

Wie kann ich über die Schnittstellen reflektieren, die von einem bestimmten Typ (von Klasse oder Schnittstelle) in .NET implementiert sind?Reflektieren über Schnittstellen eines Typs in C#

Da der reflektierte Typ generisch sein wird (sowohl im Sinne der Implementierung als auch des semantischen Sinns), wäre dies vorzuziehen, ohne einen Assemblynamen fest codieren zu müssen, obwohl mir klar ist, dass ich diesen Namen bekommen kann aus der Type-Klasse eines beliebigen Typs.

Antwort

1

Aufruf von Type.GetInterfaces().

+0

Das wäre jetzt zu einfach;) Danke. – johnc

1

Type.GetInterfaces() erhält nur deklarierte Schnittstellen (MSDN sollte Dokumentation haben, die das erklärt). Um geerbte Schnittstellen zu erhalten, müssen Sie die Arbeit selbst erledigen. Etwas ähnliche zu:

 

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(); } 

 

Ich schrieb dies die Manschette so traurig aus, wenn es nicht gerade outta-da-Box nicht kompiliert.

+0

Ich glaube nicht, dass das richtig ist. Von MSDN Rückgabe für GetInterfaces() ist: Typ: Array []() [] Ein Array von Typ-Objekten, die alle vom aktuellen Typ implementierten oder geerbten Schnittstellen darstellen. – tylerl

+0

MSDN ist korrekt. GetInterfaces gibt Schnittstellen zurück, die von Basistypen geerbt wurden, sowie Schnittstellen, die für den vorliegenden Typ deklariert wurden. – itowlson

+0

Noch einmal, und Sie werden mir nicht glauben, bis Sie es selbst versuchen, aber das bedeutet immer noch, dass es nur die DECLARED in der Klasse ist. Lesen Sie die Kommentare zu diesem Artikel auf MSDN. –

Verwandte Themen