IReflect.InvokeMember Método
Definición
Importante
Parte de la información hace referencia a la versión preliminar del producto, que puede haberse modificado sustancialmente antes de lanzar la versión definitiva. Microsoft no otorga ninguna garantía, explícita o implícita, con respecto a la información proporcionada aquí.
Invoca el miembro 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
Nombre del miembro que se va a buscar.
- invokeAttr
- BindingFlags
Uno de los atributos de invocación BindingFlags. El parámetro invokeAttr
puede ser un constructor, método, propiedad o campo. Debe especificarse un atributo de invocación apropiado. Para invocar el miembro predeterminado de una clase, pase la cadena vacía ("") como nombre del miembro.
- binder
- Binder
Una de las marcas de bits BindingFlags. Implementa Binder, que contiene propiedades relacionadas con este método.
- target
- Object
Objeto donde debe invocarse al miembro especificado. Este parámetro se omite para los miembros estáticos.
- args
- Object[]
Matriz de objetos que contiene el número, orden y tipo de los parámetros del miembro que se va a invocar. Si no hay parámetros, es una matriz vacía.
- modifiers
- ParameterModifier[]
Matriz de objetos ParameterModifier. Esta matriz tiene la misma longitud que el parámetro args
, que representa los atributos de argumento del miembro invocado en los metadatos. Un parámetro puede tener los siguientes atributos: pdIn
, pdOut
, pdRetval
, pdOptional
y pdHasDefault
. Representan a [In], [Out], [retval], [optional] y a un parámetro predeterminado, respectivamente. Diversos servicios de interoperabilidad utilizan estos atributos.
- culture
- CultureInfo
Instancia de CultureInfo usada para regir la conversión de tipos. Por ejemplo, culture
convierte una cadena que representa 1000 a un valor Double, ya que 1000 se representa de distinta manera en diferentes referencias culturales. Si este parámetro es null
, se utiliza CultureInfo para el subproceso actual.
- namedParameters
- String[]
Matriz de cadenas de parámetros.
Devoluciones
El miembro especificado.
Excepciones
Se especifica más de un argumento para un campo set
.
No se encuentran el campo o la propiedad.
No se encuentra el método.
Se invoca un miembro privado sin el objeto ReflectionPermission necesario.
Ejemplos
En el ejemplo siguiente se obtiene el valor de la Now propiedad .
#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
Comentarios
El método que se va a invocar debe ser accesible y proporcionar la coincidencia más específica con la lista de argumentos dada, bajo las restricciones del enlazador y los atributos de invocación indicados.
Se invoca un método si el número de parámetros de la declaración de método es igual al número de argumentos de la lista de argumentos especificada y el enlazador puede convertir el tipo de cada argumento en el tipo del parámetro.
Nota
La matriz de modificadores de parámetro pasados al InvokeMember método debe contener un solo modificador de parámetro. Solo se considera el primer modificador de parámetro al determinar qué argumento debe pasarse por referencia cuando se expone a COM.
El enlazador busca todos los métodos coincidentes, de acuerdo con el tipo de enlace solicitado (BindingFlags.InvokeMethod, GetProperties, etc.). El conjunto de métodos se filtra por el nombre, el número de argumentos y un conjunto de modificadores de búsqueda definidos en el enlazador. Una vez seleccionado el método, se invoca y se comprueba la accesibilidad en ese momento. La búsqueda puede controlar qué conjunto de métodos se busca en función del atributo de accesibilidad asociado al método . BindToMethod selecciona el método que se va a invocar. El enlazador predeterminado selecciona la coincidencia más específica.
Las restricciones de acceso se omiten para el código de plena confianza. Es decir, se puede tener acceso a constructores privados, métodos, campos y propiedades e invocarse a través de la reflexión siempre que el código sea de plena confianza.