2009-10-05 15 views
23

ich folgenden Fall hat:Reflexion über Schnittstellen finden implementiert

public interface IPerson { .. }  
public class Person : IPerson { .. }  
public class User : Person { .. } 

Jetzt; wenn ich ein "User" -Objekt habe - wie kann ich überprüfen, ob dies IPerson durch Reflektion implementiert? Um genau zu sein, habe ich ein Objekt, das eine Eigenschaft SomeUser haben könnte, die von einem Typ sein sollte, der die Schnittstelle "IPerson" implementiert. In meinem Fall habe ich tatsächlich einen User, aber das möchte ich durch Reflektion überprüfen. Ich kann nicht herausfinden, wie die Art der Immobilie zu überprüfen, da es sich um eine „User“ ist, aber ich möchte überprüfen, ob es IPerson implementiert ...:

var control = _container.Resolve(objType); // objType is User here 
var prop = viewType.GetProperty("SomeUser"); 
if ((prop != null) && (prop.PropertyType is IPerson)) 
{ .. } 

(Beachten Sie, dass dies eine Vereinfachung meiner tatsächlichen Fall, aber der Punkt sollte der gleiche sein ...)

+4

Wenn Sie bereits eine Objektinstanz haben, brauchen Sie keine Reflektion, um zu überprüfen, ob Ihr Objekt eine bestimmte Schnittstelle implementiert. Sie können einfach überprüfen, ob if (objUser ist IPerson) –

+0

Ist nicht 0xA3 Kommentar die richtige Antwort? – itchi

Antwort

13
var control = _container.Resolve(objType); 
var prop = viewType.GetProperty("SomeUser"); 
if ((prop != null) && (prop.PropertyType.GetInterfaces().Contains(typeof(IPerson))) 
{ .. } 
+0

Danke, aber ich denke, ich werde mit Type.IsAssignableFrom gehen. – stiank81

Verwandte Themen