441 Stimmen

Test, ob das Objekt die Schnittstelle implementiert

Wie kann man am einfachsten testen, ob ein Objekt eine bestimmte Schnittstelle in C# implementiert? (Antwort auf diese Frage in Java )

1voto

jahu Punkte 5137

Kürzlich habe ich versucht, die Antwort von Andrew Kennan zu verwenden, und aus irgendeinem Grund hat sie bei mir nicht funktioniert. Ich habe stattdessen die folgende Lösung verwendet, und es hat funktioniert (Hinweis: Die Angabe des Namensraums kann erforderlich sein).

if (typeof(someObject).GetInterface("MyNamespace.IMyInterface") != null)

0voto

iamrcw Punkte 31

Ich habe

Assert.IsTrue(myObject is ImyInterface);

für einen Test in meinem Unit-Test, der testet, dass myObject ein Objekt ist, das meine Schnittstelle ImyInterface implementiert hat.

0voto

Anthony Tristan Punkte 59

Ich hatte eine Situation, in der ich eine Variable an eine Methode übergab und mir nicht sicher war, ob es sich um eine Schnittstelle oder ein Objekt handeln würde.

Die Ziele waren:

  1. Wenn item eine Schnittstelle ist, instanziieren Sie ein Objekt, das auf dieser Schnittstelle basiert, wobei die Schnittstelle ein Parameter im Konstruktoraufruf ist.
  2. Wenn das Element ein Objekt ist, geben Sie eine Null zurück, da der Konstuktor für meine Anrufe eine Schnittstelle erwarten und ich wollte nicht, dass der Code zu tanken.

Dies habe ich mit den folgenden Maßnahmen erreicht:

    if(!typeof(T).IsClass)
    {
       // If your constructor needs arguments...
       object[] args = new object[] { my_constructor_param };
       return (T)Activator.CreateInstance(typeof(T), args, null);
    }
    else
       return default(T);

-13voto

Yoann. B Punkte 10835

Das sollte funktionieren:

MyInstace.GetType().GetInterfaces();

Aber auch schön:

if (obj is IMyInterface)

Oder sogar (nicht sehr elegant) :

if (obj.GetType() == typeof(IMyInterface))

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X