TypeDelegator.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 al miembro especificado. El método que se va a invocar debe ser accesible y proporcionar la coincidencia más específica con la lista de argumentos especificada, bajo las restricciones del enlazador y los atributos de invocación especificados.
public:
override 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 override 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);
override this.InvokeMember : string * System.Reflection.BindingFlags * System.Reflection.Binder * obj * obj[] * System.Reflection.ParameterModifier[] * System.Globalization.CultureInfo * string[] -> obj
Public Overrides 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 invocar. Puede ser un constructor, método, propiedad o campo. Si se pasa una cadena vacía (""), se invoca al miembro predeterminado.
- invokeAttr
- BindingFlags
Atributo de invocación. Debe ser uno de los siguientes BindingFlags : InvokeMethod, , CreateInstanceStatic, GetField, SetField, GetPropertyo SetProperty. Se debe especificar un atributo de invocación adecuado. Si se va a invocar un miembro estático, se debe establecer la Static marca .
- binder
- Binder
Objeto que permite el enlace, la coerción de tipos de argumentos, la invocación de miembros y la recuperación de objetos a través de MemberInfo la reflexión. Si binder es null, se usa el enlazador predeterminado. Consulte Binder.
- target
- Object
Objeto en el que se va a invocar el miembro especificado.
- args
- Object[]
Matriz de tipo Object que contiene el número, el orden y el tipo de los parámetros del miembro que se va a invocar. Si args contiene un sin inicializar Object, se trata como vacío, que, con el enlazador predeterminado, se puede ampliar a 0, 0,0 o una cadena.
- modifiers
- ParameterModifier[]
Matriz de tipo ParameterModifier que es la misma longitud argsque , con elementos que representan los atributos asociados a los argumentos del miembro que se va a invocar. Un parámetro tiene atributos asociados a él en la firma del miembro. Para ByRef, use ParameterModifier.ByRefy para ninguno, use ParameterModifier.None. El enlazador predeterminado coincide exactamente con estos. Los atributos como In y InOut no se usan en el enlace y se pueden ver mediante ParameterInfo.
- culture
- CultureInfo
Instancia de CultureInfo usada para controlar la coerción de tipos. Esto es necesario, por ejemplo, para convertir una cadena que representa 1000 a un Double valor, ya que 1000 se representa de forma diferente por referencias culturales diferentes. Si culture es null, se usa para CultureInfo el subproceso CultureInfo actual.
- namedParameters
- String[]
Matriz de cadenas que contiene nombres de parámetro que coinciden, empezando por el elemento cero, con la args matriz . No debe haber agujeros en la matriz. Si args.
Length es mayor que namedParameters.
Length, los parámetros restantes se rellenan en orden.
Devoluciones
que Object representa el valor devuelto del miembro invocado.
Comentarios
Se invocará un método si se cumplen las dos condiciones siguientes:
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 (a menos que los argumentos predeterminados se definan en el miembro).
El enlazador puede convertir el tipo de cada argumento en el tipo del parámetro .
El enlazador encontrará todos los métodos coincidentes. Estos métodos se encuentran en función del tipo de enlace solicitado (BindingFlags.MethodInvoke, BindingFlags.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 invocará. La accesibilidad se comprueba en ese momento. La búsqueda puede controlar qué conjunto de métodos se buscan en función del atributo de accesibilidad asociado al método . El Binder.BindToMethod método es responsable de seleccionar el método que se va a invocar. El enlazador predeterminado selecciona la coincidencia más específica.
Note
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 mediante la reflexión siempre que el código sea de plena confianza.
Actualmente, InvokeMember realiza la semántica de reflexión de Microsoft .NET Framework para cada tipo de objeto.
Si el miembro especificado por nombre es una matriz y la BindingFlags.GetField marca se establece en invokeAttr, la args matriz especifica los elementos cuyos valores se van a devolver. Por ejemplo, la siguiente llamada a través Type del objeto t devuelve el valor del primer elemento de la matriz de cadenas MyArray, que es un miembro del objeto que realiza la llamada:
String ret = (String) t.InvokeMember ("MyArray", BindingFlags.GetField, null, this, new Variant[]{0});
Puede usar InvokeMember para establecer uno o varios elementos de una matriz miembro. Todos los elementos se establecen en el mismo valor. La args matriz debe tener el formato siguiente:
{index1,
index2,, value}
Por ejemplo, para establecer el primer miembro de MyArray del ejemplo anterior, la sintaxis es la siguiente:
t.InvokeMember ("MyArray", BindingFlags.SetField, null, this, new
Variant[]{0,"Updated"});