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) , которая принимает экземпляр объекта.
Если динамический метод не имеет параметров, значение должно иметь значение parameters
null
. В противном случае число, тип и порядок элементов в массиве параметров должны совпадать с числом, типом и порядком параметров динамического метода.
Примечание
Эта перегрузка метода вызывается перегрузкой метода, Invoke(Object, Object[]) унаследованной от MethodBase класса , поэтому предыдущие примечания относятся к обеим перегрузкам.
Этот метод не требует разрешений напрямую, но вызов динамического метода может привести к требованиям к безопасности в зависимости от метода. Например, не предъявляются требования к анонимно размещенным динамическим методам, созданным с параметром restrictedSkipVisibility
, равным false
. С другой стороны, если вы создадите метод с restrictedSkipVisibility
параметром для параметра , true
чтобы он смог получить доступ к скрытому члену целевой сборки, метод вызовет спрос на разрешения целевой сборки плюс ReflectionPermission с флагом ReflectionPermissionFlag.MemberAccess .
Примечание
До платформа .NET Framework 2.0 этот метод требовался ReflectionPermission с флагом MemberAccess .