TypeDelegator.InvokeMember 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 membro especificado. O método que deve 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 de associação e 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);
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. Este deve ser um dos seguintes BindingFlags : InvokeMethod, , CreateInstance, Static, GetField, SetField, , GetPropertyou SetProperty. Um atributo de invocação adequado deve ser especificado. Se um membro estático deve ser invocado, o Static sinalizador deve ser definido.
- binder
- Binder
Um 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. Consulte Binder.
- target
- Object
O objeto no qual invocar o membro especificado.
- args
- Object[]
Uma matriz de tipo Object que contém o número, a ordem e o tipo dos parâmetros do membro a ser invocado. Se args contiver um não inicializado Object, ele será tratado como vazio, o que, com o associador padrão, poderá ser ampliado para 0, 0,0 ou uma cadeia de caracteres.
- modifiers
- ParameterModifier[]
Uma matriz de tipo ParameterModifier que tem o mesmo comprimento argsque , com elementos que representam os atributos associados aos argumentos do membro a ser invocado. Um parâmetro tem atributos associados a ele na assinatura do membro. Para ByRef, use ParameterModifier.ByRefe, para nenhum, use ParameterModifier.None. O associador padrão faz a 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 usada CultureInfo para controlar a coerção de tipos. Isso é necessário, por exemplo, para converter uma cadeia de caracteres que representa 1000 em um Double valor, uma vez que 1000 é representado de forma diferente por culturas diferentes. Se culture for null, o CultureInfo thread CultureInfo atual será usado.
- namedParameters
- String[]
Uma matriz de cadeia de caracteres que contém nomes de parâmetro que correspondem, começando no elemento zero, com a args matriz. Não deve haver nenhum buraco na matriz. Se args.
Length é maior que namedParameters.
Length, os parâmetros restantes são preenchidos em 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 especificada (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.MethodInvokeBindingFlags.GetPropertiese assim por diante). O conjunto de métodos é filtrado pelo nome, número de argumentos e 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 é pesquisado 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.
Note
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 Microsoft .NET Framework para cada tipo de objeto.
Se o membro especificado pelo nome for uma matriz e o BindingFlags.GetField sinalizador estiver definido invokeAttr, a args matriz especifica 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"});