Использование отражения для поиска реализованных интерфейсов - PullRequest
23 голосов
/ 05 октября 2009

У меня есть следующий случай:

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

Теперь; если у меня есть объект «Пользователь» - как я могу проверить, реализует ли это IPerson с помощью отражения? Чтобы быть более точным, у меня есть объект, который может иметь свойство SomeUser, которое должно быть некоторого типа, реализующего интерфейс «IPerson». В моем случае у меня действительно есть Пользователь, но это то, что я хочу проверить с помощью отражения. Я не могу понять, как проверить тип свойства, так как это «Пользователь», но я хочу проверить, реализует ли он IPerson ...:

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

(Обратите внимание, что это упрощение моего реального случая, но смысл должен быть таким же ...)

Ответы [ 3 ]

30 голосов
/ 05 октября 2009

Проверьте метод Type.IsAssignableFrom.

14 голосов
/ 05 октября 2009
var control = _container.Resolve(objType); 
var prop = viewType.GetProperty("SomeUser");
if ((prop != null) && (prop.PropertyType.GetInterfaces().Contains(typeof(IPerson))) 
{ .. }
0 голосов
/ 05 октября 2009
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...