DynamicMethod.Invoke Método

Definição

Invoca o método dinâmico usando os parâmetros especificados, sob as restrições do associador especificado, com as informações de cultura especificadas.

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);
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

Parâmetros

obj
Object

Esse parâmetro é ignorado para métodos dinâmicos, pois eles são estáticos. Especifique null.

invokeAttr
BindingFlags

Uma combinação bit a bit de BindingFlags valores.

binder
Binder

Um Binder objeto que permite a associação, a coerção de tipos de argumento, a invocação de membros e a recuperação de objetos por meio da MemberInfo reflexão. Se binder for null, o associador padrão será usado. Para obter mais detalhes, confira Binder.

parameters
Object[]

Uma lista de argumentos. Essa é uma matriz de argumentos com o mesmo número, ordem e tipo que os parâmetros do método a ser invocado. Se não houver parâmetros, esse parâmetro deverá ser null.

culture
CultureInfo

Uma instância usada CultureInfo para controlar a coerção de tipos. Se isso for null, o CultureInfo thread atual será usado. Por exemplo, essas informações são necessárias para converter corretamente um String que representa 1000 em um Double valor, pois 1000 é representado de forma diferente por culturas diferentes.

Retornos

Um Object que contém o valor retornado do método invocado.

Exceções

Não VarArgs há suporte para a convenção de chamada.

O número de elementos em parameters não corresponde ao número de parâmetros no método dinâmico.

O tipo de um ou mais elementos não parameters corresponde ao tipo do parâmetro correspondente do método dinâmico.

O método dinâmico é associado a um módulo, não é hospedado anonimamente e foi construído com skipVisibility definido como false, mas o método dinâmico acessa membros que não são public ou internal (Friend em Visual Basic).

-ou-

O método dinâmico é hospedado anonimamente e foi construído com skipVisibility set to false, mas acessa membros que não publicsão .

-ou-

O método dinâmico contém código não verificável. Consulte a seção "Verificação" em Comentários para DynamicMethod.

Exemplos

O exemplo de código a seguir invoca um método dinâmico com associação exata, usando a cultura US-English. Este exemplo de código faz parte de um exemplo maior fornecido para a DynamicMethod classe.

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)

Comentários

Além das exceções listadas, o código de chamada deve estar preparado para capturar quaisquer exceções geradas pelo método dinâmico.

Executar um método dinâmico com um delegado criado pelo CreateDelegate método é mais eficiente do que executá-lo com o Invoke método.

Chamar o Invoke método ou o CreateDelegate método conclui o método dinâmico. Qualquer outra tentativa de alterar o método dinâmico, como modificar definições de parâmetro ou emitir mais MSIL (linguagem intermediária da Microsoft), é ignorada; nenhuma exceção é gerada.

Todos os métodos dinâmicos são estáticos, portanto, o obj parâmetro é sempre ignorado. Para tratar um método dinâmico como se fosse um método de instância, utilize a sobrecarga CreateDelegate(Type, Object) que aceita uma instância de objeto.

Se o método dinâmico não tiver parâmetros, o valor parameters deverá ser null. Caso contrário, o número, o tipo e a ordem dos elementos na matriz de parâmetros devem ser idênticos ao número, ao tipo e à ordem dos parâmetros do método dinâmico.

Note

Essa sobrecarga de método é chamada pela sobrecarga de Invoke(Object, Object[]) método herdada da MethodBase classe, de modo que as observações anteriores se aplicam a ambas as sobrecargas.

Esse método não exige permissões diretamente, mas invocar o método dinâmico pode resultar em demandas de segurança, dependendo do método. Por exemplo, nenhuma demanda é feita para métodos dinâmicos hospedados anonimamente que são criados com o restrictedSkipVisibility parâmetro definido como false. Por outro lado, se você criar um método com restrictedSkipVisibility definido para true que ele possa acessar um membro oculto de um assembly de destino, o método causará uma demanda pelas permissões do assembly de destino mais ReflectionPermission com o ReflectionPermissionFlag.MemberAccess sinalizador.

Aplica-se a

Confira também