Это кажется довольно простым, но я не могу заставить его работать. У меня есть объект, и я использую отражение, чтобы добраться до его общедоступных свойств. Одно из этих свойств статично, и мне не удалось до него добраться.
Public Function GetProp(ByRef obj As Object, ByVal propName as String) as PropertyInfo
Return obj.GetType.GetProperty(propName)
End Function
Приведенный выше код отлично работает для свойств общедоступного экземпляра, что до сих пор было всем, что мне было нужно. Предположительно я могу использовать BindingFlags для запроса других типов свойств (частных, статических), но я не могу найти правильную комбинацию.
Public Function GetProp(ByRef obj As Object, ByVal propName as String) as PropertyInfo
Return obj.GetType.GetProperty(propName, Reflection.BindingFlags.Static Or Reflection.BindingFlags.Instance Or Reflection.BindingFlags.Public)
End Function
Но все же запрос любых статических членов ничего не возвращает. Рефлектор .NET прекрасно видит статические свойства, так что я явно чего-то упускаю.
.net
reflection
static
Кори Дауни
источник
источник
Ответы:
Или просто посмотрите на это ...
источник
p.GetValue(null);
тоже работает. Второгоnull
не требуется.Это C #, но он должен дать вам представление:
(вам нужно ИЛИ только NonPublic и Static)
источник
BindingFlags.Public | BindingFlags.Static | BindingFlags.FlattenHierarchy
было единственное, что сработало для меня.Немного ясности ...
источник
BindingFlags.Instance | BindingFlags.Static
решил это за меня.Итак, ключевым моментом для меня было использование BindingFlag .FlattenHierarchy. Я действительно не знаю, почему я просто добавил это на догадке, и он начал работать. Итак, окончательное решение, которое позволяет мне получить общедоступный экземпляр или статические свойства:
источник
Это вернет все статические свойства в статическом базовом классе или определенном типе, а также, возможно, в дочернем.
источник
Просто хотел прояснить это для себя, используя новый API отражения, основанный на
TypeInfo
- гдеBindingFlags
недоступен надежно (в зависимости от целевой платформы).В «новом» отражении, чтобы получить статические свойства для типа (не включая базовый класс (а)), вам нужно сделать что-то вроде:
Подходит как для свойств только для чтения, так и для свойств только для записи (несмотря на то, что только запись - ужасная идея).
DeclaredProperties
Член тоже не различает свойства с государственными / частным аксессорами - так фильтр вокруг видимости, то вы должны сделать это на основе аксессора вам нужно использовать. Например, если вышеупомянутый вызов вернулся, вы можете:Есть несколько доступных методов быстрого доступа, но в конечном итоге мы все собираемся писать намного больше методов расширения для
TypeInfo
методов / свойств запросов в будущем. Кроме того, новый API заставляет нас думать о том, что с этого момента мы считаем «частным» или «общедоступным» свойством, потому что мы должны фильтровать себя на основе отдельных средств доступа.источник
Кажется, что ниже работает для меня.
источник
Попробуйте эту ссылку C # Reflection .
Примечание. Я считаю, что BindingFlags.Instance и BindingFlags.Static являются исключительными.
источник