2009-10-05 10 views
23

J'ai le cas suivant:utilisant la réflexion pour trouver des interfaces mises en œuvre

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

maintenant; si j'ai un objet "Utilisateur" - comment puis-je vérifier si cela implémente IPerson en utilisant la réflexion? Pour être plus précis, j'ai un objet qui pourrait avoir une propriété SomeUser, qui devrait être de type implémentant l'interface "IPerson". Dans mon cas, j'ai effectivement un utilisateur, mais c'est ce que je veux vérifier par la réflexion. Je ne peux pas comprendre comment vérifier le type de propriété car il est un « utilisateur », mais je veux vérifier si elle met en œuvre IPerson ...:

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

(Notez que ceci est une simplification de mon cas réel, mais le point doit être le même ...)

+4

Si vous avez déjà une instance d'objet, vous n'avez pas besoin de réflexion pour vérifier si votre objet implémente une certaine interface. Vous pouvez simplement cocher 'if (objUser is IPerson)' –

+0

Le commentaire de 0xA3 n'est-il pas la bonne réponse? – itchi

Répondre

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

Merci, mais je pense que je vais aller avec Type.IsAssignableFrom. – stiank81

Questions connexes