2 Stimmen

Wie kann ich bei einem Objekt programmatisch feststellen, welche Schnittstellen es unterstützt?

Dies vorausgesetzt:

Interface IBase {string X {get;set;}}
Interface ISuper {string Y {get;set;}}

class Base : IBase {etc...}
class Super : Base, ISuper {etc...}

void Questionable (Base b) {
  Console.WriteLine ("The class supports the following interfaces... ")
  // The Magic Happens Here
}

Wodurch kann ich "The Magic" ersetzen, um die unterstützten Schnittstellen auf Objekt b anzuzeigen?

Ja, ich weiß, dass die Klasse Base "IBase" unterstützt, aber die wirkliche Hierarchie ist komplexer als diese :)

Danke! -DF5

EDIT: Jetzt, wo ich die Antwort gesehen habe, komme ich mir dumm vor, weil ich nicht mit Intellisense darüber gestolpert bin :)

Vielen Dank an alle! -DF5

8voto

Ilya Ryzhenkov Punkte 11342

B.GetType(). GetInterfaces ()

8voto

Diadistis Punkte 11787

Die Magie :

foreach (Type iface in b.GetType().GetInterfaces())
    Console.WriteLine(iface.Name);

2voto

Matt Hamilton Punkte 193704
foreach (var t in b.GetType().GetInterfaces())
{
    Console.WriteLine(t.ToString());
}

2voto

JaredPar Punkte 699699

Heh, ich habe die Console.WriteLine gesehen und dachte, Sie suchen nach einer String-Darstellung. Hier ist sie jedenfalls

public string GetInterfacesAsString(Type type) { 
  return type.GetInterfaces().Select(t => t.ToString()).Aggregate(x,y => x + "," + y);
}

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