Методы System.Type.GetProperty
В этой статье приводятся дополнительные замечания к справочной документации по этому API.
GetProperty(String)Метод
name
Поиск учитывает регистр. Поиск включает свойства общедоступного статического и общедоступного экземпляра.
Свойство считается общедоступным для отражения, если он имеет по крайней мере один общедоступный метод доступа. В противном случае свойство считается частным, и его необходимо использовать BindingFlags.NonPublic | | BindingFlags.InstanceBindingFlags.Static (в Visual Basic, объединить значения с помощью Or
) для получения.
Если текущий Type представляет созданный универсальный тип, этот метод возвращает PropertyInfo параметры типа, замененные соответствующими аргументами типа.
Если текущий Type представляет параметр типа в определении универсального типа или универсального метода, этот метод выполняет поиск свойств ограничения класса.
Ситуации, в которых AmbiguousMatchException происходят следующие ситуации:
- Тип содержит два индексированных свойства с одинаковым именем, но разные числа параметров. Чтобы устранить неоднозначность, используйте перегрузку GetProperty метода, указывающего типы параметров.
- Производный тип объявляет свойство, которое скрывает унаследованное свойство с тем же именем с помощью
new
модификатора (Shadows
в Visual Basic). Чтобы устранить неоднозначность, используйте GetProperty(String, BindingFlags) перегрузку метода и добавьте BindingFlags.DeclaredOnly флаг, чтобы ограничить поиск элементам, которые не наследуются.
GetProperty(String, BindingFlags)Метод
Свойство считается общедоступным для отражения, если он имеет по крайней мере один общедоступный метод доступа. В противном случае свойство считается частным, и его необходимо использовать BindingFlags.NonPublic | | BindingFlags.InstanceBindingFlags.Static (в Visual Basic, объединить значения с помощью Or
) для получения.
Для определения свойств, которые необходимо включить в поиск, можно использовать следующие BindingFlags флаги фильтра:
- Чтобы получить возврат, необходимо указать или
BindingFlags.Instance
BindingFlags.Static
в порядке. - Укажите
BindingFlags.Public
, чтобы включить общедоступные свойства в поиск. - Укажите
BindingFlags.NonPublic
, чтобы включить недоступные свойства (т. е. частные, внутренние и защищенные свойства) в поиск. - Укажите
BindingFlags.FlattenHierarchy
, чтобы включитьpublic
иprotected
статические элементы в иерархию;private
статические элементы в унаследованных классах не включаются.
Для изменения работы поиска можно использовать следующие BindingFlags флаги модификатора:
BindingFlags.IgnoreCase
Значение , чтобы игнорировать регистрname
.BindingFlags.DeclaredOnly
для поиска только свойств, объявленных в Typeней, а не свойств, которые были просто унаследованы.
Дополнительные сведения см. в разделе System.Reflection.BindingFlags.
Если текущий Type представляет созданный универсальный тип, этот метод возвращает PropertyInfo параметры типа, замененные соответствующими аргументами типа.
Если текущий Type представляет параметр типа в определении универсального типа или универсального метода, этот метод выполняет поиск свойств ограничения класса.
Ситуации, в которых AmbiguousMatchException происходят следующие ситуации:
- Тип содержит два индексированных свойства с одинаковым именем, но разные числа параметров. Чтобы устранить неоднозначность, используйте перегрузку GetProperty метода, указывающего типы параметров.
- Производный тип объявляет свойство, которое скрывает унаследованное свойство с тем же именем, используя
new
модификатор (Shadows
в Visual Basic). Чтобы устранить неоднозначность, включите BindingFlags.DeclaredOnly ограничение поиска элементам, которые не наследуются.
GetProperty(System.String,System.РефлексияИонный. BindingFlags,System. Рефлексия ion. Binder,System.Type,System.Type[], System. Рефлексия ion. ParameterModifier[])
Свойство считается общедоступным для отражения, если он имеет по крайней мере один общедоступный метод доступа. В противном случае свойство считается частным, и его необходимо использовать BindingFlags.NonPublic | | BindingFlags.InstanceBindingFlags.Static (в Visual Basic, объединить значения с помощью Or
) для получения.
Хотя привязка по умолчанию не обрабатывает ParameterModifier ( modifiers
параметр), можно использовать абстрактный System.Reflection.Binder класс для записи пользовательского привязчика, выполняющего процесс modifiers
. ParameterModifier
используется только при вызове COM-взаимодействия, а обрабатываются только параметры, передаваемые по ссылке.
В следующей таблице показано, какие элементы базового класса возвращаются Get
методами при отражении типа.
Тип члена | Статические | Нестатическое |
---|---|---|
Конструктор | No | No |
Поле | No | Да. Поле всегда скрывается по имени и подписи. |
Событие | Нет данных | Правило системы общего типа заключается в том, что наследование совпадает с методами, реализующими свойство. Рефлексия ion обрабатывает свойства как скрытие по имени и сигнатуре.2 |
Способ | No | Да. Метод (как виртуальный, так и не виртуальный) может быть скрыт по имени или скрытию по имени и сигнатуре. |
Вложенный тип | No | No |
Свойство | Нет данных | Правило системы общего типа заключается в том, что наследование совпадает с методами, реализующими свойство. Рефлексия ion обрабатывает свойства как скрытие по имени и сигнатуре.2 |
Примечания.
- Скрытие по имени и сигнатуре учитывает все части подписи, включая настраиваемые модификаторы, возвращаемые типы, типы параметров, sentinels и неуправляемые соглашения о вызовах. Это двоичное сравнение.
- Для отражения свойства и события скрываются по имени и сигнатуре. Если у вас есть свойство с методом get и набором доступа в базовом классе, но производный класс имеет только метод доступа, производное свойство класса скрывает свойство базового класса, и вы не сможете получить доступ к методу задания в базовом классе.
- Пользовательские атрибуты не являются частью системы общих типов.
Для определения свойств, которые необходимо включить в поиск, можно использовать следующие BindingFlags флаги фильтра:
- Чтобы получить возврат, необходимо указать или
BindingFlags.Instance
BindingFlags.Static
в порядке. - Укажите
BindingFlags.Public
, чтобы включить общедоступные свойства в поиск. - Укажите
BindingFlags.NonPublic
, чтобы включить недоступные свойства (т. е. частные, внутренние и защищенные свойства) в поиск. - Укажите
BindingFlags.FlattenHierarchy
, чтобы включитьpublic
иprotected
статические элементы в иерархию;private
статические элементы в унаследованных классах не включаются.
Для изменения работы поиска можно использовать следующие BindingFlags флаги модификатора:
BindingFlags.IgnoreCase
Значение , чтобы игнорировать регистрname
.BindingFlags.DeclaredOnly
для поиска только свойств, объявленных в Typeней, а не свойств, которые были просто унаследованы.
Дополнительные сведения см. в разделе System.Reflection.BindingFlags.
Если текущий Type представляет созданный универсальный тип, этот метод возвращает PropertyInfo параметры типа, замененные соответствующими аргументами типа.
Если текущий Type представляет параметр типа в определении универсального типа или универсального метода, этот метод выполняет поиск свойств ограничения класса.
Индексаторы и свойства по умолчанию
Visual Basic, C#и C++ имеют упрощенный синтаксис для доступа к индексируемым свойствам и позволяют использовать одно индексированное свойство по умолчанию для его типа. Например, если переменная myList
ссылается на ArrayListсинтаксис myList[3]
(myList(3)
в Visual Basic) извлекает элемент с индексом 3. Свойство можно перегружать.
В C#эта функция называется индексатором и не может ссылаться по имени. По умолчанию индексатор C# отображается в метаданных в виде индексированного свойства с именем Item
. Однако разработчик библиотеки классов может использовать IndexerNameAttribute атрибут для изменения имени индексатора в метаданных. Например, String класс имеет индексатор с именем Chars[]. Индексированные свойства, созданные с помощью языков, отличных от C#, также могут иметь имена, отличные Item
от них.
Чтобы определить, имеет ли тип свойство по умолчанию, используйте GetCustomAttributes(Type, Boolean) метод для проверки атрибута DefaultMemberAttribute . Если тип имеет DefaultMemberAttribute, MemberName свойство возвращает имя свойства по умолчанию.