2009-08-20 12 views
2

Nehmen wir an, Typ MyType implementiert Schnittstelle IMyInterface. Wie finde ich einen Typ, der eine Schnittstelle deklariert? Zum BeispielGet .NET Typ Deklaration einer Schnittstelle

class UnitTest 
{ 
    MyTypeBase : IMyInterface { } 
    MyType : MyTypeBase { } 

    void Test() { 
    Type declaration = FindDeclaration(typeof(MyType), typeof(IMyInterface)); 
    Assert.AreEqual(typeof(MyTypeBase), declaration) 
    } 
+0

Ist Ihre Frage: Wenn ich das Interface-Typ nur wissen, IMyInterface, wie finde ich eine Klasse-Typ, die diese Schnittstelle implementiert? Ist es das? Sie möchten grundsätzlich nach allen Klassen suchen, die diese Schnittstelle implementieren? –

+0

Oder ist es, dass Sie zwei Klassen haben, wie Sie gezeigt haben, und Sie betrachten die unterste Klasse und wollen wissen, wie weit oben der Baum gehen muss, um die oberste Klasse zu finden implementiert eine Schnittstelle? –

+0

Der Grund warum ich frage ist, dass Ihre Frage nicht ganz klar ist. Ich lese die erste Zeile als "Nehmen wir an, mein Auto ist gelesen. Wie finde ich ein rotes Auto?" –

Antwort

1

Sie müssen die GetInterface oder GetInterfaces Methoden der Type verwenden.

Zum Beispiel könnten Sie dies tun:

Type declaration = typeof(MyType).GetInterface("IMyInterface"); 
Assert.IsNotNull(declaration) 

Oder Sie könnten GetInterfaces und eine Schleife durch die Ergebnisse aufrufen, bis Sie IMyInterface finden.

Quellen:

Type.GetInterface(string)

Type.GetInterfaces()

+0

Ja, leider stellt sich heraus, dass das Iterieren über Schnittstellen, die GetInterfaces aufrufen, die einzige Lösung ist. –

0

Sie würden zu Fuß bis Type.BaseType, bis Sie haben auf das Niveau bekommen Sie wollen?

+0

Nun, danke, das funktioniert für Klassen. Aber das funktioniert nicht gut für Schnittstellen. –

+0

Ich denke, es sollte ein Trick sein :) –

+0

Was? Wolltest du nicht die Klasse finden, nicht die Schnittstelle? –

Verwandte Themen