Отражение унаследованного статического свойства - PullRequest
1 голос
/ 19 февраля 2012

У меня проблемы с получением статического свойства при отражении в .NET 4.0.

Скажем, например, у меня есть следующие классы:

class Foo
{
    public static int MyProperty
    {
        get { return 1234; }
    }
}

class Bar : Foo
{

}

Теперь, если я позвоню:

typeof(Foo).GetProperties();

Я получаю ожидаемый список одного свойства "MyProperty". Если вместо этого я позвоню:

typeof(Bar).GetProperties();

Я ничего не понимаю. К сожалению, я имею дело только со значениями, хранящимися как Type типов данных, поэтому я не могу напрямую вызвать typeof(Foo).GetProperties().

Спасибо за любую помощь!
Годвин

Ответы [ 2 ]

2 голосов
/ 19 февраля 2012

Вы можете указать BindingFlags.FlattenHierarchy, чтобы получить статические свойства, объявленные в базовом классе:

var props = typeof(Bar).GetProperties(BindingFlags.Public |
                                      BindingFlags.Static | 
                                      BindingFlags.FlattenHierarchy);
0 голосов
/ 19 февраля 2012
var prop = typeof (Bar).GetProperties(BindingFlags.FlattenHierarchy | BindingFlags.Public | BindingFlags.Static);

Если вам нужны частные свойства, вам также нужно добавить BindingFlags.NonPublic.См. Перечисление BindingFlags

...