Compartilhar via


IReflect.InvokeMember Método

Definição

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.

Aplica-se a

Confira também