Partilhar 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);
[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 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 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);
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);
[<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)>]
abstract member 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)>]
abstract member InvokeMember : string * System.Reflection.BindingFlags * System.Reflection.Binder * obj * obj[] * System.Reflection.ParameterModifier[] * System.Globalization.CultureInfo * string[] -> obj
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 BindingFlags atributos de invocação. O invokeAttr parâmetro pode ser um construtor, método, propriedade ou campo. Um atributo de invocação adequado deve ser especificado. 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 BindingFlags bits. Implementa, contendo propriedades relacionadas Bindera esse método.

target
Object

O objeto no qual invocar o membro especificado. Esse parâmetro é ignorado para membros estáticos.

args
Object[]

Uma matriz de objetos que contém o número, a ordem e o tipo dos parâmetros do membro a ser invocado. Essa é uma matriz vazia se não houver parâmetros.

modifiers
ParameterModifier[]

Uma matriz de objetos ParameterModifier. Essa matriz tem o mesmo comprimento que o args parâmetro, representando os atributos de argumento do membro invocado nos metadados. Um parâmetro pode ter os seguintes atributos: pdIn, , pdOut, pdRetval, pdOptionale pdHasDefault. Eles representam [In], [Out], [retval], [opcional], e um parâmetro padrão, respectivamente. Esses atributos são usados por vários serviços de interoperabilidade.

culture
CultureInfo

Uma instância usada CultureInfo para controlar a coerção de tipos. Por exemplo, culture converte uma cadeia de caracteres que representa 1000 em um Double valor, uma vez que 1000 é representado de forma diferente por culturas diferentes. Se esse parâmetro for null, o CultureInfo thread atual será usado.

namedParameters
String[]

Uma matriz de cadeia de caracteres de parâmetros.

Retornos

O membro especificado.

Atributos

Exceções

Mais de um argumento é especificado para um campo set.

O campo ou a propriedade não pode ser encontrado.

O método não pode ser encontrado.

Um membro privado é invocado sem o necessário ReflectionPermission.

Exemplos

O exemplo a Now seguir obtém o valor da propriedade.

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 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.

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.InvokeMethodGetPropertiese 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 da reflexão sempre que o código for totalmente confiável.

Aplica-se a

Confira também