DynamicMethod.Invoke Método
Definição
Importante
Algumas informações se referem a produtos de pré-lançamento que podem ser substancialmente modificados antes do lançamento. A Microsoft não oferece garantias, expressas ou implícitas, das informações aqui fornecidas.
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.