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);
[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.