DynamicMethod.Invoke Método
Definição
Importante
Algumas informações dizem respeito a um produto pré-lançado que pode ser substancialmente modificado antes de ser lançado. A Microsoft não faz garantias, de forma expressa ou implícita, em relação à informação aqui apresentada.
Invoca o método dinâmico usando os parâmetros especificados, sob as restrições do ligador especificado, com a informação de cultura especificada.
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
Este parâmetro é ignorado para métodos dinâmicos, porque são estáticos. Especifique null.
- invokeAttr
- BindingFlags
Uma combinação bit a bit de BindingFlags valores.
- binder
- Binder
Um objeto que permite a ligação, coerção de tipos de argumentos, invocação de membros e recuperação de MemberInfo objetos através da Binder reflexão. Se binder for null, utiliza-se o dossier padrão. Para obter mais detalhes, veja Binder.
- parameters
- Object[]
Uma lista de argumentos. Trata-se de um array de argumentos com o mesmo número, ordem e tipo que os parâmetros do método a invocar. Se não existirem parâmetros, este parâmetro deve ser null.
- culture
- CultureInfo
Um exemplo de CultureInfo usado para governar a coerção de tipos. Se for null, usa-se para CultureInfo a thread atual. Por exemplo, esta informação é necessária para converter corretamente um String que representa 1000 num Double valor, porque 1000 é representado de forma diferente por culturas diferentes.
Devoluções
A contendo Object o valor de retorno do método invocado.
Exceções
A VarArgs convenção de chamadas não é suportada.
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 de parameters não corresponde ao tipo do parâmetro correspondente do método dinâmico.
O método dinâmico está associado a um módulo, não é alojado anonimamente, e foi construído com skipVisibility definido para false, mas o método dinâmico acede a membros que não são public ou internal (Friend em Visual Basic).
-ou-
O método dinâmico é alojado anonimamente e foi construído com skipVisibility definido como false, mas acede a membros que não publicsão .
-ou-
O método dinâmico contém código não verificável. Consulte a secção "Verificação" em Observações para DynamicMethod.
Exemplos
O seguinte exemplo de código invoca um método dinâmico com ligaçã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)
Observações
Para além das exceções listadas, o código de chamada deve estar preparado para detetar quaisquer exceções lançadas 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 método Invoke .
Chamar o método Invoke ou o método CreateDelegate completa o método dinâmico. Qualquer tentativa adicional de alterar o método dinâmico, como modificar definições de parâmetros ou gerar mais linguagem intermédia Microsoft (MSIL), é ignorada; não é lançada qualquer exceção.
Todos os métodos dinâmicos são estáticos, por isso o obj parâmetro é sempre ignorado. Para tratar um método dinâmico como se fosse um método de instância, use a CreateDelegate(Type, Object) sobrecarga que toma uma instância de objeto.
Se o método dinâmico não tiver parâmetros, o valor de parameters deve ser null. Caso contrário, o número, tipo e ordem dos elementos no array de parâmetros devem ser idênticos ao número, tipo e ordem dos parâmetros do método dinâmico.
Note
Esta sobrecarga de método é chamada pela Invoke(Object, Object[]) sobrecarga de método herdada da MethodBase classe, pelo que as observações anteriores aplicam-se a ambas as sobrecargas.
Este método não exige permissões diretamente, mas invocar o método dinâmico pode resultar em exigências de segurança, dependendo do método. Por exemplo, não são feitas exigências para métodos dinâmicos alojados anonimamente que sejam criados com o restrictedSkipVisibility parâmetro definido como false. Por outro lado, se criares um método com restrictedSkipVisibility definido para true que possa aceder a um membro oculto de uma assembleia alvo, o método causará uma exigência das permissões da assembleia alvo plus ReflectionPermission com a ReflectionPermissionFlag.MemberAccess flag.