IReflect.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 um membro especificado.
public:
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 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 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);
abstract member InvokeMember : string * System.Reflection.BindingFlags * System.Reflection.Binder * obj * obj[] * System.Reflection.ParameterModifier[] * System.Globalization.CultureInfo * string[] -> obj
Public 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 localizado.
- invokeAttr
- BindingFlags
Um dos atributos de invocação de BindingFlags. O parâmetro invokeAttr
pode ser um construtor, um método, uma propriedade ou um campo. É necessário especificar um atributo de invocação adequado. Invoque o membro padrão de uma classe, passando a cadeia de caracteres vazia ("") como o nome do membro.
- binder
- Binder
Um dos sinalizadores de bit BindingFlags. Implementa Binder, contendo as propriedades relacionadas a este método.
- target
- Object
O objeto no qual invocar o membro especificado. Esse parâmetro é ignorado para membros estáticos.
- args
- Object[]
Esta é uma matriz de objetos que contém o número, a ordem e o tipo dos parâmetros do membro a ser invocado. Isso é uma matriz vazia se não há nenhum parâmetro.
- modifiers
- ParameterModifier[]
Uma matriz de objetos de ParameterModifier. Essa matriz tem o mesmo tamanho que o parâmetro args
que representa os atributos de argumento do membro invocado nos metadados. Um parâmetro pode ter os seguintes atributos: pdIn
, pdOut
, pdRetval
, pdOptional
e pdHasDefault
. Eles representam [In], [Out], [retval], [optional] e um parâmetro padrão, respectivamente. Esses atributos são usados por diversos serviços de interoperabilidade.
- culture
- CultureInfo
Uma instância de CultureInfo usada para determinar a coerção de tipos. Por exemplo, culture
converte uma cadeia de caracteres que representa 1000 para um valor Double, uma vez que 1000 é representado de maneira diferente por diferentes culturas. Se esse parâmetro for null
, será usado o CultureInfo para o thread atual.
- namedParameters
- String[]
Uma matriz de cadeias de caracteres de parâmetros.
Retornos
O membro especificado.
Exceções
Mais de um argumento é especificado para um campo set
.
Não é possível encontrar o campo nem a propriedade.
Não é possível localizar o método.
Um membro privado é chamado sem a ReflectionPermission necessária.
Exemplos
O exemplo a seguir obtém o valor da Now propriedade .
#using <System.DLL>
using namespace System;
using namespace System::Reflection;
#define NULL 0
void main()
{
Type^ tDate = Type::GetType( L"System.DateTime" );
Object^ result = tDate->InvokeMember( L"Now", BindingFlags::GetProperty, nullptr, NULL, gcnew array<Object^>(0) );
Console::WriteLine( result->ToString() );
}
using System;
using System.Reflection;
public class MainClass
{
public static void Main(string[] args)
{
Type tDate = typeof(System.DateTime);
Object result = tDate.InvokeMember("Now",
BindingFlags.GetProperty, null, null, new Object[0]);
Console.WriteLine(result.ToString());
}
}
Imports System.Reflection
Public Class MainClass
Public Overloads Shared Sub Main(ByVal args() As String)
Dim tDate As Type = GetType(System.DateTime)
Dim result As [Object] = tDate.InvokeMember("Now", _
BindingFlags.GetProperty, Nothing, Nothing, New [Object](-1) {})
Console.WriteLine(result.ToString())
End Sub
End Class
Comentários
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.
Um método será invocado se o número de parâmetros na declaração de método for igual ao número de argumentos na lista de argumentos especificada e o tipo de cada argumento puder ser convertido pelo associador para o tipo do parâmetro.
Observação
A matriz de modificadores de parâmetro passada para o InvokeMember método deve conter um único modificador de parâmetro. Somente o primeiro modificador de parâmetro é considerado ao determinar qual argumento precisa ser passado por referência quando exposto ao COM.
O associador localiza todos os métodos correspondentes, de acordo com o tipo de associação solicitada (BindingFlags.InvokeMethod, 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 é selecionado, ele é invocado e 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 . BindToMethod seleciona o método a ser invocado. O associador padrão seleciona a correspondência mais específica.
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 por meio de reflexão sempre que o código for totalmente confiável.