Partilhar via


TypeDelegator.InvokeMember Método

Definição

Invoca o membro especificado. O método a ser invocado deve ser acessível e fornecer a correspondência mais específica com a lista de argumentos especificada, sob as restrições dos atributos associadores e de invocação especificados.

public:
 override System::Object ^ InvokeMember(System::String ^ name, System::Reflection::BindingFlags invokeAttr, System::Reflection::Binder ^ binder, System::Object ^ target, cli::array <System::Object ^> ^ args, cli::array <System::Reflection::ParameterModifier> ^ modifiers, System::Globalization::CultureInfo ^ culture, cli::array <System::String ^> ^ namedParameters);
public override object? InvokeMember (string name, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder? binder, object? target, object?[]? args, System.Reflection.ParameterModifier[]? modifiers, System.Globalization.CultureInfo? culture, string[]? namedParameters);
public override object InvokeMember (string name, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder binder, object target, object[] args, System.Reflection.ParameterModifier[] modifiers, System.Globalization.CultureInfo culture, string[] namedParameters);
override this.InvokeMember : string * System.Reflection.BindingFlags * System.Reflection.Binder * obj * obj[] * System.Reflection.ParameterModifier[] * System.Globalization.CultureInfo * string[] -> obj
Public Overrides Function InvokeMember (name As String, invokeAttr As BindingFlags, binder As Binder, target As Object, args As Object(), modifiers As ParameterModifier(), culture As CultureInfo, namedParameters As String()) As Object

Parâmetros

name
String

O nome do membro a ser invocado. Pode ser um construtor, um método, uma propriedade ou um campo. Se uma cadeia de caracteres vazia ("") for passada, o membro padrão será invocado.

invokeAttr
BindingFlags

O atributo de invocação. Deve ser um dos seguintes BindingFlags : InvokeMethod, CreateInstance, Static, GetField, SetField, GetProperty ou SetProperty. É necessário especificar um atributo de invocação adequado. Caso um membro estático deva ser invocado, o sinalizador Static deverá ser definido.

binder
Binder

Um objeto que permite a associação, a coerção de tipos de argumentos, invocação de membros e a recuperação de objetos MemberInfo por meio de reflexão. Caso binder seja null, o associador padrão é usado. Consulte Binder.

target
Object

O objeto no qual invocar o membro especificado.

args
Object[]

Uma matriz do tipo Object que contém o número, a ordem e os tipo dos parâmetros do membro a ser invocado. Se args contiver um Object não inicializado, ele será considerado vazio, o que, com o associador padrão poderá ser ampliado para 0, 0,0 ou uma cadeia de caracteres.

modifiers
ParameterModifier[]

Uma matriz do tipo ParameterModifier que tem o mesmo comprimento de args, com elementos que representam os atributos associados com os argumentos do membro a ser invocado. Um parâmetro com atributos associados a ele na assinatura do membro. Para ByRef, use ParameterModifier.ByRef e para none, use ParameterModifier.None. O associador padrão gera uma correspondência exata neles. Atributos como In e InOut não são usados na associação e podem ser exibidos usando ParameterInfo.

culture
CultureInfo

Uma instância de CultureInfo usada para determinar a coerção de tipos. Por exemplo, isso é necessário para converter uma cadeia de caracteres que representa 1000 para um valor Double, uma vez que 1000 é representado de forma diferente por diferentes culturas. Caso culture seja null, CultureInfo para o CultureInfo do thread atual será usado.

namedParameters
String[]

Uma matriz de cadeia de caracteres que contém os nomes de parâmetros correspondentes, começando no elemento zero, com a matriz args. Não deve haver espaços na matriz. Se args. Length é maior que namedParameters. Length, os parâmetros restantes são preenchidos na ordem.

Retornos

Um Object que representa o valor retornado do membro invocado.

Comentários

Um método será invocado se ambas as seguintes condições forem verdadeiras:

  • O número de parâmetros na declaração de método é igual ao número de argumentos na lista de argumentos especificados (a menos que os argumentos padrão sejam definidos no membro).

  • O tipo de cada argumento pode ser convertido pelo associador para o tipo do parâmetro .

O associador encontrará todos os métodos correspondentes. Esses métodos são encontrados com base no tipo de associação solicitada (BindingFlags.MethodInvoke, BindingFlags.GetPropertiese assim por diante). O conjunto de métodos é filtrado pelo nome, pelo número de argumentos e por um conjunto de modificadores de pesquisa definidos no associador.

Depois que o método for selecionado, ele será invocado. A acessibilidade é verificada nesse ponto. A pesquisa pode controlar qual conjunto de métodos são pesquisados com base no atributo de acessibilidade associado ao método . O Binder.BindToMethod método é responsável por selecionar o método a ser invocado. O associador padrão seleciona a correspondência mais específica.

Observação

As restrições de acesso são ignoradas para código totalmente confiável. Ou seja, construtores privados, métodos, campos e propriedades podem ser acessados e invocados usando reflexão sempre que o código for totalmente confiável.

Atualmente, InvokeMember executa a semântica de reflexão do Microsoft .NET Framework para cada tipo de objeto.

Se o membro especificado pelo nome for uma matriz e o BindingFlags.GetField sinalizador estiver definido em invokeAttr, a args matriz especificará os elementos cujos valores devem ser retornados. Por exemplo, a chamada a seguir por meio Type do objeto t retorna o valor do primeiro elemento da matriz de cadeia de caracteres MyArray, que é um membro do objeto de chamada:

String ret = (String) t.InvokeMember ("MyArray", BindingFlags.GetField, null, this, new Variant[]{0});

Você pode usar InvokeMember para definir um ou mais elementos de uma matriz de membros. Todos os elementos são definidos com o mesmo valor. A args matriz deve ser formatada da seguinte maneira:

{index1,  
    index2,, value}  

Por exemplo, para definir o primeiro membro do MyArray do exemplo anterior, a sintaxe é a seguinte:

t.InvokeMember ("MyArray", BindingFlags.SetField, null, this, new  
    Variant[]{0,"Updated"});  

Aplica-se a

Confira também