Объяснение от одного из шаблонных гуру:
, Если Вы хотите разделить свои шаблонные источники на интерфейс и реализацию (существует много серьезных оснований сделать это, включая управление инстанцированием), Вы не можете очень хорошо использовать то же имя (foo.hpp) дважды, и foo.cpp не подходил бы ни для одного. foo.ipp ясно формирует рисунок файла, поскольку файл реализации намеревался быть #included в foo.hpp.
Если вы укажете какие-либо BindingFlags
, тогда вам нужно будет явно указать, какие свойства вы хотите получить. Например:
sometype.GetProperties (BindingFlags.DeclaredOnly |
BindingFlags.Public |
BindingFlags.Instance);
Вам нужно немного расширить свой BindingsFlag. Они должны по крайней мере указать, какой уровень доступности и экземпляр по сравнению со статическим, чтобы получить что-либо значимое обратно.
Я думаю, что вы действительно ищете следующее
var flags = BindingFlags.DeclaredOnly
| BindingFlags.Instance
| BindingFlags.Public;
someType.GetProperties(flags);
Подводя итог:
если вы используете перегрузку GetProperties ()
(без параметров), вы получите все общедоступные свойства .
, с другой стороны, если вы используете перегрузку GetProperties (BindingFlags)
(та, которая принимает параметр BindingFlags
), то вам необходимо указать побитовое ИЛИ не менее по одному из каждой группы следующих флагов:
BindingFlags.Instance
/ BindingFlags.Static
(экземпляр против статических свойств), BindingFlags.Public
/ BindingFlags. NonPublic
(общедоступные и закрытые свойства). Например, чтобы получить общедоступные статические свойства, вам нужно будет вызвать GetProperties (BindingFlags.Public | BindingFlags.Static)
, чтобы получить результаты. Вызов только GetProperties (BindingFlags.Public)
или GetProperties (BindingFlags.Static)
не вернет никаких результатов.
Обратите внимание, что указание BindingFlags.Default
вернет пустой массив .
Полную информацию можно найти в документации MSDN для GetProperties (BindingFlags) :
Следующие флаги BindingFlags filter могут использоваться для определения вложенных типов, которые следует включить в поиск:
- Вы должны указать либо
BindingFlags.Instance
, либоBindingFlags .Static
, чтобы получить результат.- Укажите
BindingFlags.Public
, чтобы включить общедоступные свойства в поиск.- Укажите
BindingFlags.NonPublic
, чтобы включить не- общедоступные методы (то есть частные, внутренние и защищенные методы) в поиске. Возвращаются только защищенные и внутренние методы базовых классов; частные методы базовых классов не возвращаются.- Укажите
BindingFlags.FlattenHierarchy
, чтобы включить общедоступные и защищенные статические элементы вверх по иерархии; закрытые статические члены в унаследованных классах не включаются.Следующие флаги модификатора BindingFlags могут использоваться для изменения способа работы поиска:
BindingFlags.DeclaredOnly
для поиска только свойств, объявленных в Тип, а не свойства, которые были просто унаследованы.