3 Stimmen

Wie erfährt man, ob eine Schnittstelle von einer bestimmten Schnittstelle abgeleitet ist?

Ich habe eine solche Schnittstelle:

 public interface IViewA : IViewB, IViewC
 {
    byte prop { get; set; }
 }

und ich habe eine generische Methode wie diese:

public void OpenPopup<T>(WindowState state)
{
    if ((typeof(T) as IViewC)!=null)
    {
         //Process A
    }
    else
    {
        //Process B
    }

}

Obwohl ich T als eine Schnittstelle sende, die von IViewC abgeleitet ist, wird Prozess A nicht verarbeitet.

Wie kann man also zur Laufzeit über Reflexion erfahren, ob eine Schnittstelle von einer anderen Schnittstelle abgeleitet ist?

danke

4voto

JaredPar Punkte 699699

Versuchen Sie Folgendes

if ( typeof(IViewC).IsAssignableFrom(typeof(T)) { 
  ...
}

2voto

Jacob Mattison Punkte 48729

の代わりに typeof verwenden. isAssignableFrom .

2voto

Nader Shirazie Punkte 10691

Versuchen Sie etwas wie typeof(IViewC).IsAssignableFrom(typeof(T)) .

Im Moment versuchen Sie, die typeof(T) die ein System.Type als IViewC was nicht funktionieren wird.

1voto

Matt Greer Punkte 58978

typeof(T) as IViewC ist völlig falsch. Sie versuchen, von Type a IViewC was immer scheitern wird, da es immer null ergibt.

Sie wollen typeof(T).GetInterfaces() und sehen Sie in der zurückgegebenen Liste nach, ob Ihre Schnittstelle dort enthalten ist.

0voto

JSBձոգչ Punkte 39615
if ((typeof(T) as IViewC)!=null)

Das ist falsch. Was Sie geschrieben haben, testet, ob die Type Objekt zurückgegeben von typeof(T) ist ein IViewC was sie offensichtlich nicht ist.

Sie wollen:

if (typeof(IViewC).IsAssignableFrom(typeof(T))

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