Type.InvokeMember Метод
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Вызывает определенный член текущего Type.
Перегрузки
| Имя | Описание |
|---|---|
| InvokeMember(String, BindingFlags, Binder, Object, Object[], ParameterModifier[], CultureInfo, String[]) |
При переопределении в производном классе вызывает указанный член, используя указанные ограничения привязки и сопоставляя указанный список аргументов, модификаторы и региональные параметры. |
| InvokeMember(String, BindingFlags, Binder, Object, Object[], CultureInfo) |
Вызывает указанный элемент, используя указанные ограничения привязки и сопоставляя указанный список аргументов и язык и региональные параметры. |
| InvokeMember(String, BindingFlags, Binder, Object, Object[]) |
Вызывает указанный элемент, используя указанные ограничения привязки и сопоставляя указанный список аргументов. |
InvokeMember(String, BindingFlags, Binder, Object, Object[], ParameterModifier[], CultureInfo, String[])
- Исходный код:
- Type.cs
- Исходный код:
- Type.cs
- Исходный код:
- Type.cs
- Исходный код:
- Type.cs
- Исходный код:
- Type.cs
При переопределении в производном классе вызывает указанный член, используя указанные ограничения привязки и сопоставляя указанный список аргументов, модификаторы и региональные параметры.
public:
abstract System::Object ^ InvokeMember(System::String ^ name, System::Reflection::BindingFlags invokeAttr, System::Reflection::Binder ^ binder, System::Object ^ target, cli::array <System::Object ^> ^ args, cli::array <System::Reflection::ParameterModifier> ^ modifiers, System::Globalization::CultureInfo ^ culture, cli::array <System::String ^> ^ namedParameters);
[System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicConstructors | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicFields | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicMethods | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicProperties | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicConstructors | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicFields | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicMethods | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicProperties)]
public abstract object? InvokeMember(string name, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder? binder, object? target, object?[]? args, System.Reflection.ParameterModifier[]? modifiers, System.Globalization.CultureInfo? culture, string[]? namedParameters);
[System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.All)]
public abstract object? InvokeMember(string name, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder? binder, object? target, object?[]? args, System.Reflection.ParameterModifier[]? modifiers, System.Globalization.CultureInfo? culture, string[]? namedParameters);
public abstract object InvokeMember(string name, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder binder, object target, object[] args, System.Reflection.ParameterModifier[] modifiers, System.Globalization.CultureInfo culture, string[] namedParameters);
public abstract object? InvokeMember(string name, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder? binder, object? target, object?[]? args, System.Reflection.ParameterModifier[]? modifiers, System.Globalization.CultureInfo? culture, string[]? namedParameters);
[<System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicConstructors | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicFields | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicMethods | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicProperties | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicConstructors | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicFields | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicMethods | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicProperties)>]
abstract member InvokeMember : string * System.Reflection.BindingFlags * System.Reflection.Binder * obj * obj[] * System.Reflection.ParameterModifier[] * System.Globalization.CultureInfo * string[] -> obj
[<System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.All)>]
abstract member InvokeMember : string * System.Reflection.BindingFlags * System.Reflection.Binder * obj * obj[] * System.Reflection.ParameterModifier[] * System.Globalization.CultureInfo * string[] -> obj
abstract member InvokeMember : string * System.Reflection.BindingFlags * System.Reflection.Binder * obj * obj[] * System.Reflection.ParameterModifier[] * System.Globalization.CultureInfo * string[] -> obj
Public MustOverride Function InvokeMember (name As String, invokeAttr As BindingFlags, binder As Binder, target As Object, args As Object(), modifiers As ParameterModifier(), culture As CultureInfo, namedParameters As String()) As Object
Параметры
- name
- String
Строка, содержащая имя конструктора, метода, свойства или элемента поля для вызова.
–или–
Пустая строка ("") для вызова элемента по умолчанию.
–или–
Для IDispatch членов строка, представляющая DispID, например [DispID=3].
- invokeAttr
- BindingFlags
Побитовое сочетание значений перечисления, указывающее, как выполняется поиск. Доступ может быть одним из BindingFlags таких, как Public, NonPublic, Private, InvokeMethodи GetFieldт. д. Тип подстановки не должен быть указан. Если тип подстановки опущен, BindingFlags.Public | | BindingFlags.InstanceBindingFlags.Static используется.
- binder
- Binder
Объект, который определяет набор свойств и включает привязку, которая может включать выбор перегруженного метода, приведение типов аргументов и вызов элемента через отражение.
–или–
Ссылка null (Nothing в Visual Basic) для использования DefaultBinder. Обратите внимание, что явное определение Binder объекта может потребоваться для успешного вызова перегрузки метода с аргументами переменной.
- target
- Object
Объект, на котором вызывается указанный элемент.
- args
- Object[]
Массив, содержащий аргументы для передачи в член для вызова.
- modifiers
- ParameterModifier[]
Массив объектов ParameterModifier, представляющих атрибуты, связанные с соответствующим элементом в массиве args. Связанные атрибуты параметра хранятся в сигнатуре члена.
Привязка по умолчанию обрабатывает этот параметр только при вызове COM-компонента.
- culture
- CultureInfo
Объект CultureInfo , представляющий языковой стандарт глобализации для использования, который может потребоваться для преобразования языкового стандарта, например преобразования числовых строк в double.
–или–
Ссылка на null (Nothing в Visual Basic) для использования текущего потока CultureInfo.
- namedParameters
- String[]
Массив, содержащий имена параметров, в которые передаются значения в args массиве.
Возвращаемое значение
Объект, представляющий возвращаемое значение вызываемого элемента.
Реализации
- Атрибуты
Исключения
invokeAttrне содержит и не содержит CreateInstancenull.name
args и modifiers не имеют той же длины.
–или–
invokeAttr не является допустимым BindingFlags атрибутом.
–или–
invokeAttrне содержит один из следующих флагов привязки: InvokeMethod, CreateInstance, , GetField, SetFieldGetPropertyили SetProperty.
–или–
invokeAttrсодержит в сочетании CreateInstance с InvokeMethod, GetField, , SetFieldGetPropertyили SetProperty.
–или–
invokeAttr содержит оба GetField и SetField.
–или–
invokeAttr содержит оба GetProperty и SetProperty.
–или–
invokeAttr содержится в сочетании InvokeMethod с SetField или SetProperty.
–или–
invokeAttr
SetField содержит и args содержит несколько элементов.
–или–
Именованный массив параметров больше массива аргументов.
–или–
Этот метод вызывается для COM-объекта, и один из следующих флагов привязки не был передан в: BindingFlags.InvokeMethod, , BindingFlags.GetProperty, BindingFlags.SetPropertyBindingFlags.PutDispPropertyили BindingFlags.PutRefDispProperty.
–или–
Один из именованных массивов параметров содержит строку, которая является null.
Указанный член является инициализатором класса.
Не удается найти поле или свойство.
Метод не найден, соответствующий аргументам.args
–или–
Элемент не найден, в который указаны namedParametersимена аргументов.
–или–
Текущий Type объект представляет тип, содержащий параметры открытого типа, то есть ContainsGenericParameters возвращает true.
Указанный элемент нельзя вызвать target.
Несколько методов соответствуют критериям привязки.
Метод, представленный одним или несколькими name неопределенными параметрами универсального типа. То есть свойство метода ContainsGenericParameters возвращается true.
Комментарии
InvokeMember вызывает член конструктора или член метода, получает или задает элемент свойства, получает или задает член поля данных или получает или задает элемент элемента элемента массива.
Замечание
Нельзя использовать InvokeMember для вызова универсального метода.
При вызове IDispatch элемента можно указать dispID вместо имени члена, используя строковый формат "[DispID=##]". Например, если значение DispID myComMethod равно 3, можно указать строку "[DispID=3]" вместо "MyComMethod". Вызов члена с помощью DispID быстрее, чем поиск элемента по имени. В сложных сценариях агрегирования dispID иногда является единственным способом вызова требуемого элемента.
Хотя привязыватель по умолчанию не обрабатывает или (и параметры), можно использовать абстрактный System.Reflection.Binder класс для записи пользовательского привязчика, выполняющего обработку modifiers и culture.culturemodifiersCultureInfoParameterModifier
ParameterModifier используется только для вызовов через взаимодействие с COM, и обрабатываются только параметры, передаваемые по ссылке.
Каждый параметр в массиве namedParameters получает значение в соответствующем элементе в массиве args . Если длина больше длины args , остальные значения аргументов namedParametersпередаются в порядке.
Массив namedParameters можно использовать для изменения порядка аргументов в входном массиве. Например, учитывая метод M(string a, int b) (M(ByVal a As String, ByVal b As Integer) в Visual Basic) и входной массив { 42, "x" }, входной массив можно передать без изменений в args, если массив { "b", "a" } предоставляется для namedParameters.
BindingFlags Следующие флаги фильтров можно использовать для определения элементов, которые необходимо включить в поиск:
Укажите
BindingFlags.Public, чтобы включить общедоступные члены в поиск.Укажите
BindingFlags.NonPublic, чтобы включить не открытые члены (т. е. частные, внутренние и защищенные элементы) в поиск.Укажите
BindingFlags.FlattenHierarchy, чтобы включить статические члены в иерархию.
Для изменения работы поиска можно использовать следующие BindingFlags флаги модификатора:
BindingFlags.IgnoreCaseигнорировать регистрname.BindingFlags.DeclaredOnlyпоиск только членов, объявленных на Typeнее, а не наследуемые.
BindingFlags Следующие флаги вызова можно использовать для обозначения действий, которые необходимо предпринять с элементом:
CreateInstanceдля вызова конструктора.nameне учитывается. Недопустимо с другими флагами вызова.InvokeMethodдля вызова метода, но не конструктора или инициализатора типов. Недопустимый сSetFieldилиSetProperty. ЕслиInvokeMethodзадано само по себе,BindingFlags.PublicиBindingFlags.InstanceBindingFlags.Staticавтоматически включаются.GetFieldчтобы получить значение поля. Недопустимый сSetField.SetFieldзначение поля. Недопустимый сGetField.GetPropertyдля получения свойства. Недопустимый сSetProperty.SetProperty, чтобы задать свойство. Недопустимый сGetProperty.
См. System.Reflection.BindingFlags для получения дополнительной информации.
Метод вызывается, если оба из следующих условий имеют значение true:
Число параметров в объявлении метода равно числу аргументов в
argsмассиве (если аргументы по умолчанию не определены в элементе иBindingFlags.OptionalParamBindingуказаны).Тип каждого аргумента можно преобразовать привязщиком в тип параметра.
Привязчик найдет все соответствующие методы. Эти методы обнаруживаются на основе типа запрошенной привязки (BindingFlagsзначений InvokeMethodGetPropertyи т. д.). Набор методов фильтруется по имени, количеству аргументов и набору модификаторов поиска, определенных в привязке.
После выбора метода он вызывается. Специальные возможности проверяются на этом этапе. Поиск может управлять набором методов поиска на основе атрибута специальных возможностей, связанного с методом. Метод Binder.BindToMethodBinder класса отвечает за выбор вызываемого метода. Привязка по умолчанию выбирает наиболее конкретное совпадение.
InvokeMember можно использовать для вызова методов с параметрами, имеющими значения по умолчанию. Для привязки к этим методам необходимо BindingFlags.OptionalParamBinding указать отражение. Для параметра, имеющего значение по умолчанию, можно указать другое значение или указать Missing.Value для использования значения по умолчанию.
Например, рассмотрим метод, например MyMethod(int x, float y = 2.0). Чтобы вызвать этот метод только с первым аргументом в качестве MyMethod(4), передайте один из указанных выше флагов привязки и передайте два аргумента, а именно 4 для первого аргумента и Missing.Value второго аргумента. Если вы не используете Missing.Value, вы не можете исключить необязательные параметры с методом Invoke . Если это необходимо сделать, используйте InvokeMember вместо этого.
Ограничения доступа игнорируются для полностью доверенного кода; То есть к частным конструкторам, методам, полям и свойствам можно обращаться и вызывать каждый System.Reflection раз, когда код полностью доверяется.
Можно использовать Type.InvokeMember для задания поля определенному значению, указав BindingFlags.SetField. Например, если вы хотите задать поле общедоступного экземпляра с именем F в классе C и F, Stringможно использовать такой код, как:
typeof(C).InvokeMember("F", BindingFlags.SetField, null, c, new Object[] {"strings new value"}, null, null, null);
Если F является, String[]можно использовать такой код, как:
typeof(C).InvokeMember("F", BindingFlags.SetField, null, c, new Object[] {new String[]{"a","z","c","d"}}, null, null, null);
который инициализирует поле F в этом новом массиве. Можно также использовать Type.InvokeMember для задания позиции в массиве, указав индекс значения, а затем следующее значение с помощью кода, например следующего:
typeof(C).InvokeMember("F", BindingFlags.SetField, null, c, new Object[] {1, "b"}, null, null, null);
Это приведет к изменению строки "z" в массиве, который F содержит строку "b".
Замечание
Этот метод можно использовать для доступа к недоступным членам, если вызывающий объект был предоставлен ReflectionPermission с ReflectionPermissionFlag.RestrictedMemberAccess флагом, и если набор грантов, не являющихся открытыми, ограничен набором предоставления вызывающего объекта или подмножеством. (См. вопросы безопасности для отражения.)
Чтобы использовать эту функцию, приложение должно использовать платформу .NET Framework 3.5 или более поздней версии.
См. также раздел
- String
- Binder
- DefaultBinder
- BindingFlags
- ParameterModifier
- ParameterAttributes
- CultureInfo
- ReflectionPermission
Применяется к
InvokeMember(String, BindingFlags, Binder, Object, Object[], CultureInfo)
- Исходный код:
- Type.cs
- Исходный код:
- Type.cs
- Исходный код:
- Type.cs
- Исходный код:
- Type.cs
- Исходный код:
- Type.cs
Вызывает указанный элемент, используя указанные ограничения привязки и сопоставляя указанный список аргументов и язык и региональные параметры.
public:
System::Object ^ InvokeMember(System::String ^ name, System::Reflection::BindingFlags invokeAttr, System::Reflection::Binder ^ binder, System::Object ^ target, cli::array <System::Object ^> ^ args, System::Globalization::CultureInfo ^ culture);
public:
virtual System::Object ^ InvokeMember(System::String ^ name, System::Reflection::BindingFlags invokeAttr, System::Reflection::Binder ^ binder, System::Object ^ target, cli::array <System::Object ^> ^ args, System::Globalization::CultureInfo ^ culture);
[System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicConstructors | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicFields | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicMethods | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicProperties | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicConstructors | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicFields | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicMethods | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicProperties)]
public object? InvokeMember(string name, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder? binder, object? target, object?[]? args, System.Globalization.CultureInfo? culture);
[System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.All)]
public object? InvokeMember(string name, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder? binder, object? target, object?[]? args, System.Globalization.CultureInfo? culture);
public object InvokeMember(string name, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder binder, object target, object[] args, System.Globalization.CultureInfo culture);
public object? InvokeMember(string name, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder? binder, object? target, object?[]? args, System.Globalization.CultureInfo? culture);
[<System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicConstructors | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicFields | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicMethods | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicProperties | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicConstructors | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicFields | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicMethods | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicProperties)>]
member this.InvokeMember : string * System.Reflection.BindingFlags * System.Reflection.Binder * obj * obj[] * System.Globalization.CultureInfo -> obj
[<System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.All)>]
member this.InvokeMember : string * System.Reflection.BindingFlags * System.Reflection.Binder * obj * obj[] * System.Globalization.CultureInfo -> obj
member this.InvokeMember : string * System.Reflection.BindingFlags * System.Reflection.Binder * obj * obj[] * System.Globalization.CultureInfo -> obj
abstract member InvokeMember : string * System.Reflection.BindingFlags * System.Reflection.Binder * obj * obj[] * System.Globalization.CultureInfo -> obj
override this.InvokeMember : string * System.Reflection.BindingFlags * System.Reflection.Binder * obj * obj[] * System.Globalization.CultureInfo -> obj
Public Function InvokeMember (name As String, invokeAttr As BindingFlags, binder As Binder, target As Object, args As Object(), culture As CultureInfo) As Object
Параметры
- name
- String
Строка, содержащая имя конструктора, метода, свойства или элемента поля для вызова.
–или–
Пустая строка ("") для вызова элемента по умолчанию.
–или–
Для IDispatch членов строка, представляющая DispID, например [DispID=3].
- invokeAttr
- BindingFlags
Побитовое сочетание значений перечисления, указывающее, как выполняется поиск. Доступ может быть одним из BindingFlags таких, как Public, NonPublic, Private, InvokeMethodи GetFieldт. д. Тип подстановки не должен быть указан. Если тип подстановки опущен, BindingFlags.Public | | BindingFlags.InstanceBindingFlags.Static используется.
- binder
- Binder
Объект, который определяет набор свойств и включает привязку, которая может включать выбор перегруженного метода, приведение типов аргументов и вызов элемента через отражение.
–или–
Ссылка null (Nothing в Visual Basic) используется DefaultBinder. Обратите внимание, что явное определение Binder объекта может потребоваться для успешного вызова перегрузки метода с аргументами переменной.
- target
- Object
Объект, на котором вызывается указанный элемент.
- args
- Object[]
Массив, содержащий аргументы для передачи в член для вызова.
- culture
- CultureInfo
Объект, представляющий языковой стандарт глобализации для использования, который может потребоваться для преобразования конкретного языкового стандарта, например преобразования числового String стандарта в .Double
–или–
Ссылка на null (Nothing в Visual Basic) для использования текущего потока CultureInfo.
Возвращаемое значение
Объект, представляющий возвращаемое значение вызываемого элемента.
Реализации
- Атрибуты
Исключения
invokeAttrне содержит и не содержит CreateInstancenull.name
invokeAttr не является допустимым BindingFlags атрибутом.
–или–
invokeAttrне содержит один из следующих флагов привязки: InvokeMethod, CreateInstance, , GetField, SetFieldGetPropertyили SetProperty.
–или–
invokeAttrсодержит в сочетании CreateInstance с InvokeMethod, GetField, , SetFieldGetPropertyили SetProperty.
–или–
invokeAttr содержит оба GetField и SetField.
–или–
invokeAttr содержит оба GetProperty и SetProperty.
–или–
invokeAttr содержится в сочетании InvokeMethod с SetField или SetProperty.
–или–
invokeAttr
SetField содержит и args содержит несколько элементов.
–или–
Этот метод вызывается для COM-объекта, и один из следующих флагов привязки не был передан в: BindingFlags.InvokeMethod, , BindingFlags.GetProperty, BindingFlags.SetPropertyBindingFlags.PutDispPropertyили BindingFlags.PutRefDispProperty.
–или–
Один из именованных массивов параметров содержит строку, которая является null.
Указанный член является инициализатором класса.
Не удается найти поле или свойство.
Метод не найден, соответствующий аргументам.args
–или–
Текущий Type объект представляет тип, содержащий параметры открытого типа, то есть ContainsGenericParameters возвращает true.
Указанный элемент нельзя вызвать target.
Несколько методов соответствуют критериям привязки.
Метод, представленный одним или несколькими name неопределенными параметрами универсального типа. То есть свойство метода ContainsGenericParameters возвращается true.
Комментарии
Хотя привязка по умолчанию не выполняет обработку для CultureInfo (culture параметр), можно использовать абстрактный класс System.Reflection.Binder, чтобы создать пользовательский привязчик, который обрабатывает culture.
Замечание
Нельзя использовать InvokeMember для вызова универсального метода.
BindingFlags Следующие флаги фильтров можно использовать для определения элементов, которые необходимо включить в поиск:
Укажите
BindingFlags.Public, чтобы включить общедоступные члены в поиск.Укажите
BindingFlags.NonPublic, чтобы включить не открытые члены (т. е. частные, внутренние и защищенные элементы) в поиск.Укажите
BindingFlags.FlattenHierarchy, чтобы включить статические члены в иерархию.
Для изменения работы поиска можно использовать следующие BindingFlags флаги модификатора:
BindingFlags.IgnoreCaseигнорировать регистрname.BindingFlags.DeclaredOnlyпоиск только членов, объявленных на Typeнее, а не наследуемые.
BindingFlags Следующие флаги вызова можно использовать для обозначения действий, которые необходимо предпринять с элементом:
CreateInstanceдля вызова конструктора.nameне учитывается. Недопустимо с другими флагами вызова.InvokeMethodдля вызова метода, но не конструктора или инициализатора типов. Недопустимый сSetFieldилиSetProperty. ЕслиInvokeMethodзадано само по себе,BindingFlags.PublicиBindingFlags.InstanceBindingFlags.Staticавтоматически включаются.GetFieldчтобы получить значение поля. Недопустимый сSetField.SetFieldзначение поля. Недопустимый сGetField.GetPropertyдля получения свойства. Недопустимый сSetProperty.SetProperty, чтобы задать свойство. Недопустимый сGetProperty.
См. System.Reflection.BindingFlags для получения дополнительной информации.
Метод вызывается, если оба из следующих условий имеют значение true:
Число параметров в объявлении метода равно числу аргументов в
argsмассиве (если аргументы по умолчанию не определены в элементе иBindingFlags.OptionalParamBindingуказаны).Тип каждого аргумента можно преобразовать привязщиком в тип параметра.
Привязчик найдет все соответствующие методы. Эти методы обнаруживаются на основе типа запрошенной привязки (BindingFlagsзначений InvokeMethodGetPropertyи т. д.). Набор методов фильтруется по имени, количеству аргументов и набору модификаторов поиска, определенных в привязке.
После выбора метода он вызывается. Специальные возможности проверяются на этом этапе. Поиск может управлять набором методов поиска на основе атрибута специальных возможностей, связанного с методом. Метод Binder.BindToMethodBinder класса отвечает за выбор вызываемого метода. Привязка по умолчанию выбирает наиболее конкретное совпадение.
Ограничения доступа игнорируются для полностью доверенного кода; т. е. частные конструкторы, методы, поля и свойства могут быть доступны и вызваны с помощью отражения всякий раз, когда код полностью доверяется.
Можно использовать Type.InvokeMember для задания поля определенному значению, указав BindingFlags.SetField. Например, если вы хотите задать поле общедоступного экземпляра с именем F в классе C, а F — это String код, например:
typeof(C).InvokeMember("F", BindingFlags.SetField, null, c, new Object[] {"strings new value"}, null);
Если F является, String[]можно использовать такой код, как:
typeof(C).InvokeMember("F", BindingFlags.SetField, null, c, new Object[] {new String[]{"a","z","c","d"}}, null);
который инициализирует поле F в этом новом массиве. Можно также использовать Type.InvokeMember для задания позиции в массиве, указав индекс значения, а затем следующее значение с помощью кода, например следующего:
typeof(C).InvokeMember("F", BindingFlags.SetField, null, c, new Object[] {1, "b"}, null);
Это приведет к изменению строки "z" в массиве, который F содержит строку "b".
При вызове IDispatch элемента можно указать dispID вместо имени члена, используя строковый формат "[DispID=##]". Например, если значение DispID myComMethod равно 3, можно указать строку "[DispID=3]" вместо "MyComMethod". Вызов члена с помощью DispID быстрее, чем поиск элемента по имени. В сложных сценариях агрегирования dispID иногда является единственным способом вызова требуемого элемента.
Замечание
Этот метод можно использовать для доступа к недоступным членам, если вызывающий объект был предоставлен ReflectionPermission с ReflectionPermissionFlag.RestrictedMemberAccess флагом, и если набор грантов, не являющихся открытыми, ограничен набором предоставления вызывающего объекта или подмножеством. (См. вопросы безопасности для отражения.)
Чтобы использовать эту функцию, приложение должно использовать платформу .NET Framework 3.5 или более поздней версии.
См. также раздел
- String
- Binder
- DefaultBinder
- BindingFlags
- ParameterModifier
- ParameterAttributes
- CultureInfo
- ReflectionPermission
Применяется к
InvokeMember(String, BindingFlags, Binder, Object, Object[])
- Исходный код:
- Type.cs
- Исходный код:
- Type.cs
- Исходный код:
- Type.cs
- Исходный код:
- Type.cs
- Исходный код:
- Type.cs
Вызывает указанный элемент, используя указанные ограничения привязки и сопоставляя указанный список аргументов.
public:
System::Object ^ InvokeMember(System::String ^ name, System::Reflection::BindingFlags invokeAttr, System::Reflection::Binder ^ binder, System::Object ^ target, cli::array <System::Object ^> ^ args);
public:
virtual System::Object ^ InvokeMember(System::String ^ name, System::Reflection::BindingFlags invokeAttr, System::Reflection::Binder ^ binder, System::Object ^ target, cli::array <System::Object ^> ^ args);
[System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicConstructors | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicFields | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicMethods | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicProperties | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicConstructors | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicFields | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicMethods | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicProperties)]
public object? InvokeMember(string name, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder? binder, object? target, object?[]? args);
[System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.All)]
public object? InvokeMember(string name, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder? binder, object? target, object?[]? args);
public object InvokeMember(string name, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder binder, object target, object[] args);
public object? InvokeMember(string name, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder? binder, object? target, object?[]? args);
[<System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicConstructors | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicFields | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicMethods | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicProperties | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicConstructors | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicFields | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicMethods | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicProperties)>]
member this.InvokeMember : string * System.Reflection.BindingFlags * System.Reflection.Binder * obj * obj[] -> obj
[<System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.All)>]
member this.InvokeMember : string * System.Reflection.BindingFlags * System.Reflection.Binder * obj * obj[] -> obj
member this.InvokeMember : string * System.Reflection.BindingFlags * System.Reflection.Binder * obj * obj[] -> obj
abstract member InvokeMember : string * System.Reflection.BindingFlags * System.Reflection.Binder * obj * obj[] -> obj
override this.InvokeMember : string * System.Reflection.BindingFlags * System.Reflection.Binder * obj * obj[] -> obj
Public Function InvokeMember (name As String, invokeAttr As BindingFlags, binder As Binder, target As Object, args As Object()) As Object
Параметры
- name
- String
Строка, содержащая имя конструктора, метода, свойства или элемента поля для вызова.
–или–
Пустая строка ("") для вызова элемента по умолчанию.
–или–
Для IDispatch членов строка, представляющая DispID, например [DispID=3].
- invokeAttr
- BindingFlags
Побитовое сочетание значений перечисления, указывающее, как выполняется поиск. Доступ может быть одним из BindingFlags таких, как Public, NonPublic, Private, InvokeMethodи GetFieldт. д. Тип подстановки не должен быть указан. Если тип подстановки опущен, BindingFlags.Public | | BindingFlags.InstanceBindingFlags.Static используется.
- binder
- Binder
Объект, который определяет набор свойств и включает привязку, которая может включать выбор перегруженного метода, приведение типов аргументов и вызов элемента через отражение.
–или–
Ссылка null (Nothing в Visual Basic) используется DefaultBinder. Обратите внимание, что явное определение Binder объекта может потребоваться для успешного вызова перегрузки метода с аргументами переменной.
- target
- Object
Объект, на котором вызывается указанный элемент.
- args
- Object[]
Массив, содержащий аргументы для передачи в член для вызова.
Возвращаемое значение
Объект, представляющий возвращаемое значение вызываемого элемента.
Реализации
- Атрибуты
Исключения
invokeAttrне содержит и не содержит CreateInstancenull.name
invokeAttr не является допустимым BindingFlags атрибутом.
–или–
invokeAttrне содержит один из следующих флагов привязки: InvokeMethod, CreateInstance, , GetField, SetFieldGetPropertyили SetProperty.
–или–
invokeAttrсодержит в сочетании CreateInstance с InvokeMethod, GetField, , SetFieldGetPropertyили SetProperty.
–или–
invokeAttr содержит оба GetField и SetField.
–или–
invokeAttr содержит оба GetProperty и SetProperty.
–или–
invokeAttr содержится в сочетании InvokeMethod с SetField или SetProperty.
–или–
invokeAttr
SetField содержит и args содержит несколько элементов.
–или–
Этот метод вызывается для COM-объекта, и один из следующих флагов привязки не был передан в: BindingFlags.InvokeMethod, , BindingFlags.GetProperty, BindingFlags.SetPropertyBindingFlags.PutDispPropertyили BindingFlags.PutRefDispProperty.
–или–
Один из именованных массивов параметров содержит строку, которая является null.
Указанный член является инициализатором класса.
Не удается найти поле или свойство.
Метод не найден, соответствующий аргументам.args
–или–
Текущий Type объект представляет тип, содержащий параметры открытого типа, то есть ContainsGenericParameters возвращает true.
Указанный элемент нельзя вызвать target.
Несколько методов соответствуют критериям привязки.
В настоящее время .NET Compact Framework не поддерживает этот метод.
Метод, представленный одним или несколькими name неопределенными параметрами универсального типа. То есть свойство метода ContainsGenericParameters возвращается true.
Примеры
В следующем примере используется InvokeMember для доступа к членам типа.
using System;
using System.Reflection;
// This sample class has a field, constructor, method, and property.
class MyType
{
Int32 myField;
public MyType(ref Int32 x) {x *= 5;}
public override String ToString() {return myField.ToString();}
public Int32 MyProp
{
get {return myField;}
set
{
if (value < 1)
throw new ArgumentOutOfRangeException("value", value, "value must be > 0");
myField = value;
}
}
}
class MyApp
{
static void Main()
{
Type t = typeof(MyType);
// Create an instance of a type.
Object[] args = new Object[] {8};
Console.WriteLine("The value of x before the constructor is called is {0}.", args[0]);
Object obj = t.InvokeMember(null,
BindingFlags.DeclaredOnly |
BindingFlags.Public | BindingFlags.NonPublic |
BindingFlags.Instance | BindingFlags.CreateInstance, null, null, args);
Console.WriteLine("Type: " + obj.GetType().ToString());
Console.WriteLine("The value of x after the constructor returns is {0}.", args[0]);
// Read and write to a field.
t.InvokeMember("myField",
BindingFlags.DeclaredOnly |
BindingFlags.Public | BindingFlags.NonPublic |
BindingFlags.Instance | BindingFlags.SetField, null, obj, new Object[] {5});
Int32 v = (Int32) t.InvokeMember("myField",
BindingFlags.DeclaredOnly |
BindingFlags.Public | BindingFlags.NonPublic |
BindingFlags.Instance | BindingFlags.GetField, null, obj, null);
Console.WriteLine("myField: " + v);
// Call a method.
String s = (String) t.InvokeMember("ToString",
BindingFlags.DeclaredOnly |
BindingFlags.Public | BindingFlags.NonPublic |
BindingFlags.Instance | BindingFlags.InvokeMethod, null, obj, null);
Console.WriteLine("ToString: " + s);
// Read and write a property. First, attempt to assign an
// invalid value; then assign a valid value; finally, get
// the value.
try
{
// Assign the value zero to MyProp. The Property Set
// throws an exception, because zero is an invalid value.
// InvokeMember catches the exception, and throws
// TargetInvocationException. To discover the real cause
// you must catch TargetInvocationException and examine
// the inner exception.
t.InvokeMember("MyProp",
BindingFlags.DeclaredOnly |
BindingFlags.Public | BindingFlags.NonPublic |
BindingFlags.Instance | BindingFlags.SetProperty, null, obj, new Object[] {0});
}
catch (TargetInvocationException e)
{
// If the property assignment failed for some unexpected
// reason, rethrow the TargetInvocationException.
if (e.InnerException.GetType() !=
typeof(ArgumentOutOfRangeException))
throw;
Console.WriteLine("An invalid value was assigned to MyProp.");
}
t.InvokeMember("MyProp",
BindingFlags.DeclaredOnly |
BindingFlags.Public | BindingFlags.NonPublic |
BindingFlags.Instance | BindingFlags.SetProperty, null, obj, new Object[] {2});
v = (Int32) t.InvokeMember("MyProp",
BindingFlags.DeclaredOnly |
BindingFlags.Public | BindingFlags.NonPublic |
BindingFlags.Instance | BindingFlags.GetProperty, null, obj, null);
Console.WriteLine("MyProp: " + v);
}
}
open System
open System.Reflection
// This sample class has a field, constructor, method, and property.
type MyType() =
let mutable myField = 0
member _.MyType(x: int byref) =
x <- x * 5
override _.ToString() =
string myField
member _.MyProp
with get () = myField
and set value =
if value < 1 then
raise (ArgumentOutOfRangeException("value", value, "value must be > 0"))
myField <- value
let t = typeof<MyType>
// Create an instance of a type.
let args = Array.zeroCreate<obj> 8
printfn $"The value of x before the constructor is called is {args[0]}."
let obj = t.InvokeMember(null,
BindingFlags.DeclaredOnly |||
BindingFlags.Public ||| BindingFlags.NonPublic |||
BindingFlags.Instance ||| BindingFlags.CreateInstance, null, null, args)
printfn $"Type: {obj.GetType()}"
printfn $"The value of x after the constructor returns is {args[0]}."
// Read and write to a field.
t.InvokeMember("myField",
BindingFlags.DeclaredOnly |||
BindingFlags.Public ||| BindingFlags.NonPublic |||
BindingFlags.Instance ||| BindingFlags.SetField, null, obj, Array.zeroCreate<obj> 5) |> ignore
let v = t.InvokeMember("myField",
BindingFlags.DeclaredOnly |||
BindingFlags.Public ||| BindingFlags.NonPublic |||
BindingFlags.Instance ||| BindingFlags.GetField, null, obj, null) :?> int
printfn $"myField: {v}"
// Call a method.
let s = t.InvokeMember("ToString",
BindingFlags.DeclaredOnly |||
BindingFlags.Public ||| BindingFlags.NonPublic |||
BindingFlags.Instance ||| BindingFlags.InvokeMethod, null, obj, null) :?> string
printfn $"ToString: {s}"
// Read and write a property. First, attempt to assign an
// invalid value then assign a valid value finally, get
// the value.
try
// Assign the value zero to MyProp. The Property Set
// throws an exception, because zero is an invalid value.
// InvokeMember catches the exception, and throws
// TargetInvocationException. To discover the real cause
// you must catch TargetInvocationException and examine
// the inner exception.
t.InvokeMember("MyProp",
BindingFlags.DeclaredOnly |||
BindingFlags.Public ||| BindingFlags.NonPublic |||
BindingFlags.Instance ||| BindingFlags.SetProperty, null, obj, Array.zeroCreate<obj> 0) |> ignore
with :? TargetInvocationException as e ->
// If the property assignment failed for some unexpected
// reason, rethrow the TargetInvocationException.
if e.InnerException.GetType() <> typeof<ArgumentOutOfRangeException> then
reraise ()
printfn "An invalid value was assigned to MyProp."
t.InvokeMember("MyProp",
BindingFlags.DeclaredOnly |||
BindingFlags.Public ||| BindingFlags.NonPublic |||
BindingFlags.Instance ||| BindingFlags.SetProperty, null, obj, Array.zeroCreate<obj> 2) |> ignore
let v2 = t.InvokeMember("MyProp",
BindingFlags.DeclaredOnly |||
BindingFlags.Public ||| BindingFlags.NonPublic |||
BindingFlags.Instance ||| BindingFlags.GetProperty, null, obj, null)
printfn $"MyProp: {v2}"
Imports System.Reflection
' This sample class has a field, constructor, method, and property.
Class MyType
Private myField As Int32
Public Sub New(ByRef x As Int32)
x *= 5
End Sub
Public Overrides Function ToString() As [String]
Return myField.ToString()
End Function 'ToString
Public Property MyProp() As Int32
Get
Return myField
End Get
Set(ByVal Value As Int32)
If Value < 1 Then
Throw New ArgumentOutOfRangeException("value", Value, "value must be > 0")
End If
myField = Value
End Set
End Property
End Class
Class MyApp
Shared Sub Main()
Dim t As Type = GetType(MyType)
' Create an instance of a type.
Dim args() As [Object] = {8}
Console.WriteLine("The value of x before the constructor is called is {0}.", args(0))
Dim obj As [Object] = t.InvokeMember(Nothing, BindingFlags.DeclaredOnly Or BindingFlags.Public Or BindingFlags.NonPublic Or BindingFlags.Instance Or BindingFlags.CreateInstance, Nothing, Nothing, args)
Console.WriteLine("Type: {0}", obj.GetType().ToString())
Console.WriteLine("The value of x after the constructor returns is {0}.", args(0))
' Read and write to a field.
t.InvokeMember("myField", BindingFlags.DeclaredOnly Or BindingFlags.Public Or BindingFlags.NonPublic Or BindingFlags.Instance Or BindingFlags.SetField, Nothing, obj, New [Object]() {5})
Dim v As Int32 = CType(t.InvokeMember("myField", BindingFlags.DeclaredOnly Or BindingFlags.Public Or BindingFlags.NonPublic Or BindingFlags.Instance Or BindingFlags.GetField, Nothing, obj, Nothing), Int32)
Console.WriteLine("myField: {0}", v)
' Call a method.
Dim s As [String] = CType(t.InvokeMember("ToString", BindingFlags.DeclaredOnly Or BindingFlags.Public Or BindingFlags.NonPublic Or BindingFlags.Instance Or BindingFlags.InvokeMethod, Nothing, obj, Nothing), [String])
Console.WriteLine("ToString: {0}", s)
' Read and write a property. First, attempt to assign an
' invalid value; then assign a valid value; finally, get
' the value.
Try
' Assign the value zero to MyProp. The Property Set
' throws an exception, because zero is an invalid value.
' InvokeMember catches the exception, and throws
' TargetInvocationException. To discover the real cause
' you must catch TargetInvocationException and examine
' the inner exception.
t.InvokeMember("MyProp", BindingFlags.DeclaredOnly Or BindingFlags.Public Or BindingFlags.NonPublic Or BindingFlags.Instance Or BindingFlags.SetProperty, Nothing, obj, New [Object]() {0})
Catch e As TargetInvocationException
' If the property assignment failed for some unexpected
' reason, rethrow the TargetInvocationException.
If Not e.InnerException.GetType() Is GetType(ArgumentOutOfRangeException) Then
Throw
End If
Console.WriteLine("An invalid value was assigned to MyProp.")
End Try
t.InvokeMember("MyProp", BindingFlags.DeclaredOnly Or BindingFlags.Public Or BindingFlags.NonPublic Or BindingFlags.Instance Or BindingFlags.SetProperty, Nothing, obj, New [Object]() {2})
v = CType(t.InvokeMember("MyProp", BindingFlags.DeclaredOnly Or BindingFlags.Public Or BindingFlags.NonPublic Or BindingFlags.Instance Or BindingFlags.GetProperty, Nothing, obj, Nothing), Int32)
Console.WriteLine("MyProp: {0}", v)
End Sub
End Class
Комментарии
Замечание
Нельзя использовать InvokeMember для вызова универсального метода.
BindingFlags Следующие флаги фильтров можно использовать для определения элементов, которые необходимо включить в поиск:
Укажите
BindingFlags.Public, чтобы включить общедоступные члены в поиск.Укажите
BindingFlags.NonPublic, чтобы включить не открытые члены (т. е. частные и защищенные) в поиск.Укажите
BindingFlags.FlattenHierarchy, чтобы включить статические члены в иерархию.
Для изменения работы поиска можно использовать следующие BindingFlags флаги модификатора:
BindingFlags.IgnoreCaseигнорировать регистрname.BindingFlags.DeclaredOnlyпоиск только членов, объявленных на Typeнее, а не наследуемые.
BindingFlags Следующие флаги вызова можно использовать для обозначения действий, которые необходимо предпринять с элементом:
CreateInstanceдля вызова конструктора.nameне учитывается. Недопустимо с другими флагами вызова.InvokeMethodдля вызова метода, но не конструктора или инициализатора типов. Недопустимый сSetFieldилиSetProperty. ЕслиInvokeMethodзадано само по себе,BindingFlags.PublicиBindingFlags.InstanceBindingFlags.Staticавтоматически включаются.GetFieldчтобы получить значение поля. Недопустимый сSetField.SetFieldзначение поля. Недопустимый сGetField.GetPropertyдля получения свойства. Недопустимый сSetProperty.SetProperty, чтобы задать свойство. Недопустимый сGetProperty.
См. System.Reflection.BindingFlags для получения дополнительной информации.
Метод вызывается, если оба из следующих условий имеют значение true:
Число параметров в объявлении метода равно числу аргументов в
argsмассиве (если аргументы по умолчанию не определены в элементе иBindingFlags.OptionalParamBindingуказаны).Тип каждого аргумента можно преобразовать привязщиком в тип параметра.
Привязчик найдет все соответствующие методы. Эти методы обнаруживаются на основе типа запрошенной привязки (BindingFlagsзначений InvokeMethodGetPropertyи т. д.). Набор методов фильтруется по имени, количеству аргументов и набору модификаторов поиска, определенных в привязке.
После выбора метода он вызывается. Специальные возможности проверяются на этом этапе. Поиск может управлять набором методов поиска на основе атрибута специальных возможностей, связанного с методом. Метод Binder.BindToMethodBinder класса отвечает за выбор вызываемого метода. Привязка по умолчанию выбирает наиболее конкретное совпадение.
Ограничения доступа игнорируются для полностью доверенного кода; То есть к частным конструкторам, методам, полям и свойствам можно обращаться и вызывать каждый System.Reflection раз, когда код полностью доверяется.
Можно использовать Type.InvokeMember для задания поля определенному значению, указав BindingFlags.SetField. Например, если вы хотите задать поле общедоступного экземпляра с именем F в классе C и F, Stringможно использовать такой код, как:
typeof(C).InvokeMember("F", BindingFlags.SetField, null, c, new Object[] {"strings new value"});
Если F является, String[]можно использовать такой код, как:
typeof(C).InvokeMember("F", BindingFlags.SetField, null, c, new Object[] {new String[]{"a","z","c","d"}});
который инициализирует поле F в этом новом массиве. Можно также использовать Type.InvokeMember для задания позиции в массиве, указав индекс значения, а затем следующее значение с помощью кода, например следующего:
typeof(C).InvokeMember("F", BindingFlags.SetField, null, c, new Object[] {1, "b"});
Это приведет к изменению строки "z" в массиве, который F содержит строку "b".
При вызове IDispatch элемента можно указать dispID вместо имени члена, используя строковый формат "[DispID=##]". Например, если значение DispID myComMethod равно 3, можно указать строку "[DispID=3]" вместо "MyComMethod". Вызов члена с помощью DispID быстрее, чем поиск элемента по имени. В сложных сценариях агрегирования dispID иногда является единственным способом вызова требуемого элемента.
Замечание
Этот метод можно использовать для доступа к недоступным членам, если вызывающий объект был предоставлен ReflectionPermission с ReflectionPermissionFlag.RestrictedMemberAccess флагом, и если набор грантов, не являющихся открытыми, ограничен набором предоставления вызывающего объекта или подмножеством. (См. вопросы безопасности для отражения.)
Чтобы использовать эту функцию, приложение должно использовать платформу .NET Framework 3.5 или более поздней версии.
См. также раздел
- String
- Binder
- DefaultBinder
- BindingFlags
- ParameterModifier
- ParameterAttributes
- CultureInfo
- ReflectionPermission