TypeDelegator.InvokeMember 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 elemento especificado. O método a invocar 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 binder 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);
[System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicConstructors | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicFields | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicMethods | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicProperties | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicConstructors | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicFields | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicMethods | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicProperties)]
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);
[System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.All)]
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);
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);
[<System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicConstructors | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicFields | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicMethods | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicProperties | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicConstructors | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicFields | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicMethods | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicProperties)>]
override this.InvokeMember : string * System.Reflection.BindingFlags * System.Reflection.Binder * obj * obj[] * System.Reflection.ParameterModifier[] * System.Globalization.CultureInfo * string[] -> obj
[<System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.All)>]
override this.InvokeMember : string * System.Reflection.BindingFlags * System.Reflection.Binder * obj * obj[] * System.Reflection.ParameterModifier[] * System.Globalization.CultureInfo * string[] -> obj
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 invocar. Isto pode ser um construtor, método, propriedade ou campo. Se uma cadeia vazia ("") for passada, o membro padrão é invocado.
- invokeAttr
- BindingFlags
O atributo de invocação. Isto deve ser um dos seguintes BindingFlags : InvokeMethod, CreateInstance, Static, GetField, SetField, GetProperty, ou SetProperty. Deve ser especificado um atributo de invocação adequado. Se um membro estático for invocado, a Static flag deve ser definida.
- binder
- Binder
Um objeto que permite a vinculação, coerção de tipos de argumentos, invocação de membros e recuperação de MemberInfo objetos através de reflexão. Se binder for null, utiliza-se o dossier padrão. Consulte Binder.
- target
- Object
O objeto sobre o qual invocar o membro especificado.
- args
- Object[]
Um array de tipo Object que contém o número, ordem e tipo dos parâmetros do membro a invocar. Se args contiver um não inicializado Object, é tratado como vazio, que, com o fichário padrão, pode ser alargado para 0, 0,0 ou uma cadeia.
- modifiers
- ParameterModifier[]
Um array de tipo ParameterModifier com o mesmo comprimento que args, com elementos que representam os atributos associados aos argumentos do membro a invocar. Um parâmetro tem atributos associados na assinatura do membro. Para ByRef, use ParameterModifier.ByRef, e para nenhum, use ParameterModifier.None. O dossier padrão faz correspondência exata nestes. Atributos como In e InOut não são usados na ligação, e podem ser visualizados usando ParameterInfo.
- culture
- CultureInfo
Um exemplo de CultureInfo usado para governar a coerção de tipos. Isto é necessário, por exemplo, para converter uma cadeia que representa 1000 num Double valor, uma vez que 1000 é representado de forma diferente por culturas diferentes. Se culture for null, usa-se o CultureInfo tópico para a linha CultureInfo atual.
- namedParameters
- String[]
Um array de strings contendo nomes de parâmetros que coincidem, começando no elemento zero, com o args array. Não deve haver buracos na matriz. Se args.
Length é maior que namedParameters.
Length, os restantes parâmetros são preenchidos por ordem.
Devoluções
Um Object representa o valor de retorno do membro invocado.
- Atributos
Observações
Um método será invocado se ambas as seguintes condições forem verdadeiras:
O número de parâmetros na declaração do método é igual ao número de argumentos na lista de argumentos especificada (a menos que os argumentos padrão estejam definidos no membro).
O tipo de cada argumento pode ser convertido pelo ligador para o tipo do parâmetro.
O dossier vai encontrar todos os métodos de correspondência. Estes métodos são encontrados com base no tipo de encadernação solicitado (BindingFlags.MethodInvoke, BindingFlags.GetProperties, e assim sucessivamente). O conjunto de métodos é filtrado pelo nome, número de argumentos e um conjunto de modificadores de pesquisa definidos no binder.
Depois de selecionado o método, será invocado. A acessibilidade é verificada nesse ponto. A pesquisa pode controlar que 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 dossier 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 acedidos e invocados usando reflexão sempre que o código for totalmente confiável.
Atualmente, InvokeMember realiza a semântica de reflexão do Microsoft .NET Framework para cada tipo de objeto.
Se o elemento especificado pelo nome for um array e o BindingFlags.GetField flag estiver definido em invokeAttr, o args array especifica os elementos cujos valores devem ser devolvidos. Por exemplo, a seguinte chamada através Type do objeto t devolve o valor do primeiro elemento do MyArray do array de strings, que é um membro do objeto que chama:
String ret = (String) t.InvokeMember ("MyArray", BindingFlags.GetField, null, this, new Variant[]{0});
Pode usar InvokeMember para definir um ou mais elementos de um array de membros. Todos os elementos são definidos com o mesmo valor. O args array deve ser formatado da seguinte forma:
{index1,
index2,, value}
Por exemplo, para definir o primeiro membro do MyArray a partir do exemplo anterior, a sintaxe é a seguinte:
t.InvokeMember ("MyArray", BindingFlags.SetField, null, this, new
Variant[]{0,"Updated"});