Поделиться через


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 путем отражения. Если значение параметра binder равно null, используется связыватель по умолчанию. Дополнительные сведения см. в статье 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.

Примеры

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

Console::WriteLine("\r\nUse the Invoke method to execute the dynamic method:");
// Create an array of arguments to use with the Invoke method.
array<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(nullptr, BindingFlags::ExactBinding, nullptr, invokeArgs, gcnew CultureInfo("en-us"));
Console::WriteLine("hello.Invoke returned: " + objRet);
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 метода завершает динамический метод. Любая дальнейшая попытка изменения динамического метода, например изменение определений параметров или создание более промежуточного языка Майкрософт (MSIL), игнорируется; исключение не создается.

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

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

Примечание

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

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

Примечание

До платформа .NET Framework 2.0 этот метод требовался ReflectionPermission с флагом MemberAccess .

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

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