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 )

682voto

Robert C. Barth Punkte 21461
if (object is IBlah)

oder

IBlah myTest = originalObject as IBlah

if (myTest != null)

257voto

Andrew Kennan Punkte 13537

Die Verwendung des is o as Operatoren ist der richtige Weg, wenn Sie den Schnittstellentyp zur Kompilierzeit kennen und eine Instanz des Typs haben, den Sie testen. Etwas, das niemand sonst erwähnt zu haben scheint, ist Type.IsAssignableFrom :

if( typeof(IMyInterface).IsAssignableFrom(someOtherType) )
{
}

Ich denke, das ist viel übersichtlicher, als das Array zu durchsuchen, das von GetInterfaces und hat den Vorteil, dass es auch für Schulklassen funktioniert.

51voto

Martin Schneider Punkte 12384

Wenn Sie das typisierte Objekt nach der Prüfung verwenden wollen:
Seit C# 7.0:

if (obj is IMyInterface myObj)

Dies ist dasselbe wie

IMyInterface myObj = obj as IMyInterface;
if (myObj != null)

Siehe .NET Docs: Überblick über den Mustervergleich

29voto

Rauhotz Punkte 7594

Für die Instanz:

if (obj is IMyInterface) {}

Für die Klasse:

Prüfen Sie, ob typeof(MyClass).GetInterfaces() enthält die Schnittstelle.

16voto

famousgarkin Punkte 12992

Eine Abwandlung der Antwort von @AndrewKennan habe ich kürzlich für Typen verwendet, die zur Laufzeit erhalten werden:

if (serviceType.IsInstanceOfType(service))
{
    // 'service' does implement the 'serviceType' type
}

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