DynamicMethod.Invoke Метод

Определение

Вызывает динамический метод с помощью указанных параметров в ограничениях указанного привязчика с указанными сведениями о языке и региональных параметрах.

public:
 override System::Object ^ Invoke(System::Object ^ obj, System::Reflection::BindingFlags invokeAttr, System::Reflection::Binder ^ binder, cli::array <System::Object ^> ^ parameters, System::Globalization::CultureInfo ^ culture);
public override object? Invoke(object? obj, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder? binder, object?[]? parameters, System.Globalization.CultureInfo? culture);
public override object Invoke(object obj, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder binder, object[] parameters, System.Globalization.CultureInfo culture);
override this.Invoke : obj * System.Reflection.BindingFlags * System.Reflection.Binder * obj[] * System.Globalization.CultureInfo -> obj
Public Overrides Function Invoke (obj As Object, invokeAttr As BindingFlags, binder As Binder, parameters As Object(), culture As CultureInfo) As Object

Параметры

obj
Object

Этот параметр игнорируется для динамических методов, так как они являются статическими. Укажите null.

invokeAttr
BindingFlags

Побитовое сочетание значений BindingFlags .

binder
Binder

Объект Binder , который включает привязку, приведение типов аргументов, вызов элементов и извлечение MemberInfo объектов с помощью отражения. Если bindernull, используется привязка по умолчанию. Дополнительные сведения см. в статье Binder.

parameters
Object[]

Список аргументов. Это массив аргументов с тем же числом, порядком и типом, что и параметры вызываемого метода. Если этот параметр не должен иметь nullпараметров.

culture
CultureInfo

Экземпляр, используемый CultureInfo для управления приведением типов. Если это nullтак, CultureInfo используется текущий поток. Например, эти сведения необходимы для правильного преобразования String значения, представляющего 1000 Double в значение, так как 1000 представлены по-разному различными языками и региональными параметрами.

Возвращаемое значение

Значение Object , содержащее возвращаемое значение вызываемого метода.

Исключения

Соглашение о вызове VarArgs не поддерживается.

Количество элементов в parameters не соответствует количеству параметров в динамическом методе.

Тип одного или нескольких элементов parameters не соответствует типу соответствующего параметра динамического метода.

Динамический метод связан с модулем, не размещается анонимно и был создан с skipVisibility задано значение false, но динамический метод обращается к членам, не public или internal (Friend в Visual Basic).

–или–

Динамический метод размещается анонимно и был создан с skipVisibility заданным значением false, но он обращается к членам, которые не publicявляются.

–или–

Динамический метод содержит непроверяемый код. См. раздел "Проверка" в примечаниях для DynamicMethod.

Примеры

В следующем примере кода вызывается динамический метод с точной привязкой, используя региональные настройки английского языка США. Этот пример кода является частью более крупного примера, предоставленного для DynamicMethod класса.

Console.WriteLine("\r\nUse the Invoke method to execute the dynamic method:");
// Create an array of arguments to use with the Invoke method.
object[] invokeArgs = {"\r\nHello, World!", 42};
// Invoke the dynamic method using the arguments. This is much
// slower than using the delegate, because you must create an
// array to contain the arguments, and value-type arguments
// must be boxed.
object objRet = hello.Invoke(null, BindingFlags.ExactBinding, null, invokeArgs, new CultureInfo("en-us"));
Console.WriteLine("hello.Invoke returned: " + objRet);
Console.WriteLine(vbCrLf & "Use the Invoke method to execute the dynamic method:")
' Create an array of arguments to use with the Invoke method.
Dim invokeArgs() As Object = {vbCrLf & "Hello, World!", 42}
' Invoke the dynamic method using the arguments. This is much
' slower than using the delegate, because you must create an
' array to contain the arguments, and value-type arguments
' must be boxed.
Dim objRet As Object = hello.Invoke(Nothing, _
    BindingFlags.ExactBinding, Nothing, invokeArgs, _
    New CultureInfo("en-us"))
Console.WriteLine("hello.Invoke returned: {0}", objRet)

Комментарии

Помимо перечисленных исключений, вызывающий код должен быть подготовлен для перехвата всех исключений, создаваемых динамическим методом.

Выполнение динамического метода с делегатом, созданным методом CreateDelegate, является более эффективным, чем выполнение методом Invoke.

Вызов метода Invoke или метода CreateDelegate завершает динамический метод. Любая дальнейшая попытка изменить динамический метод, например изменение определений параметров или генерация кода среднего уровня Microsoft (MSIL), игнорируется; исключение не выбрасывается.

Все динамические методы являются статическими, поэтому obj параметр всегда игнорируется. Для обработки динамического метода как метода экземпляра, используйте перегрузку CreateDelegate(Type, Object), которая принимает экземпляр объекта.

Если динамический метод не имеет параметров, значение parameters должно быть null. В противном случае число, тип и порядок элементов в массиве параметров должно совпадать с числом, типом и порядком параметров динамического метода.

Note

Эта перегрузка метода вызывается Invoke(Object, Object[]) перегрузкой метода, унаследованной от MethodBase класса, поэтому предыдущие примечания применяются к обоим перегрузкам.

Этот метод не требует разрешений напрямую, но вызов динамического метода может привести к требованиям безопасности в зависимости от метода. Например, требования не требуются для анонимных размещенных динамических методов, созданных с заданным параметром restrictedSkipVisibilityfalse. С другой стороны, если вы создаете метод с наборомrestrictedSkipVisibility, чтобы он смог получить доступ к скрытому члену целевой сборки, метод вызовет спрос на разрешения целевой сборки плюс true с флагомReflectionPermission.ReflectionPermissionFlag.MemberAccess

Применяется к

См. также раздел