Доступ к свойствам абстрактного класса с отражением - PullRequest
3 голосов
/ 25 августа 2011

У меня есть абстрактный класс - назовем его Base. Этот класс содержит некоторые свойства. Более того, у меня есть другой класс, унаследованный от класса Base - назовем его Child. Child не является абстрактным.

Я хочу получить доступ к свойствам из класса Base с помощью Reflection, а только к тем свойствам, которые объявлены в Base.

Следующий код, конечно, невозможен, потому что я не могу создать экземпляр абстрактного класса

Base base = new Base();
Type type = base.GetType();
PropertyInfo[] propInfos =
    type.GetProperties(
        BindingFlags.Instance | BindingFlags.Public | BindingFlags.DeclaredOnly
    );

Возможен следующий код, но я получаю все свойства, определенные в Base, а также свойства, определенные в Child.

Child child = new Child();
Type type = child.GetType();
PropertyInfo[] propInfos =
    type.GetProperties(BindingFlags.Instance | BindingFlags.Public);

Как я могу получить все свойства класса Base через Reflection?

Ответы [ 2 ]

3 голосов
/ 25 августа 2011

Попробуйте это:

Type type = typeof(A);

PropertyInfo[] propInfos 
    = type.GetProperties(BindingFlags.Instance 
        | BindingFlags.Public 
        | BindingFlags.DeclaredOnly);
2 голосов
/ 25 августа 2011

Вызов GetType() объекта - это только один из способов получения объекта Type. Другой, который работает даже для abstract классов, это typeof(). Использование опции BindingFlags.DeclaredOnly с typeof(A).GetProperties должно помочь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...