Compartir a través de


Type.InvokeMember Método

Definición

Invoca un miembro específico del objeto actual Type.

Sobrecargas

Nombre Description
InvokeMember(String, BindingFlags, Binder, Object, Object[], ParameterModifier[], CultureInfo, String[])

Cuando se reemplaza en una clase derivada, invoca al miembro especificado, utilizando las restricciones de enlace especificadas y coincidendo con la lista de argumentos, modificadores y referencia cultural especificados.

InvokeMember(String, BindingFlags, Binder, Object, Object[], CultureInfo)

Invoca al miembro especificado mediante las restricciones de enlace especificadas y coincide con la lista de argumentos y la referencia cultural especificadas.

InvokeMember(String, BindingFlags, Binder, Object, Object[])

Invoca al miembro especificado mediante las restricciones de enlace especificadas y coincide con la lista de argumentos especificada.

InvokeMember(String, BindingFlags, Binder, Object, Object[], ParameterModifier[], CultureInfo, String[])

Source:
Type.cs
Source:
Type.cs
Source:
Type.cs
Source:
Type.cs
Source:
Type.cs

Cuando se reemplaza en una clase derivada, invoca al miembro especificado, utilizando las restricciones de enlace especificadas y coincidendo con la lista de argumentos, modificadores y referencia cultural especificados.

public:
 abstract 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 abstract 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 abstract 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 abstract 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 abstract 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 MustOverride 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

Cadena que contiene el nombre del constructor, el método, la propiedad o el miembro de campo que se va a invocar.

O bien

Cadena vacía ("") para invocar el miembro predeterminado.

O bien

Para IDispatch los miembros, una cadena que representa el DispID, por ejemplo "[DispID=3]".

invokeAttr
BindingFlags

Combinación bit a bit de los valores de enumeración que especifican cómo se realiza la búsqueda. El acceso puede ser uno de los BindingFlags elementos como Public, NonPublic, Private, InvokeMethod, GetFieldetc. No es necesario especificar el tipo de búsqueda. Si se omite el tipo de búsqueda, BindingFlags.Public | | BindingFlags.InstanceBindingFlags.Static se usan.

binder
Binder

Objeto que define un conjunto de propiedades y habilita el enlace, que puede implicar la selección de un método sobrecargado, la coerción de tipos de argumentos y la invocación de un miembro a través de la reflexión.

O bien

Referencia nula (Nothing en Visual Basic), para usar el DefaultBinder. Tenga en cuenta que puede ser necesario definir explícitamente un Binder objeto para invocar correctamente sobrecargas de método con argumentos variables.

target
Object

Objeto en el que se va a invocar el miembro especificado.

args
Object[]

Matriz que contiene los argumentos que se van a pasar al miembro que se va a invocar.

modifiers
ParameterModifier[]

Matriz de ParameterModifier objetos que representan los atributos asociados al elemento correspondiente de la args matriz. Los atributos asociados de un parámetro se almacenan en la firma del miembro.

El enlazador predeterminado procesa este parámetro solo al llamar a un componente COM.

culture
CultureInfo

Objeto CultureInfo que representa la configuración regional de globalización que se va a usar, que puede ser necesario para conversiones específicas de la configuración regional, como convertir una cadena numérica en un valor Double.

O bien

Referencia nula (Nothing en Visual Basic) para usar el CultureInfo del subproceso actual.

namedParameters
String[]

Matriz que contiene los nombres de los parámetros a los que se pasan los valores de la args matriz.

Devoluciones

Objeto que representa el valor devuelto del miembro invocado.

Implementaciones

Atributos

Excepciones

invokeAttr no contiene CreateInstance y name es null.

args y modifiers no tienen la misma longitud.

O bien

invokeAttr no es un atributo válido BindingFlags .

O bien

invokeAttr no contiene una de las marcas de enlace siguientes: InvokeMethod, CreateInstance, GetField, SetField, GetPropertyo SetProperty.

O bien

invokeAttr contiene CreateInstance combinado con InvokeMethod, GetField, SetField, GetPropertyo SetProperty.

O bien

invokeAttr contiene y GetFieldSetField.

O bien

invokeAttr contiene y GetPropertySetProperty.

O bien

invokeAttr contiene InvokeMethod combinado con SetField o SetProperty.

O bien

invokeAttr contiene SetField y args tiene más de un elemento.

O bien

La matriz de parámetros con nombre es mayor que la matriz de argumentos.

O bien

Este método se llama en un objeto COM y no se pasó una de las marcas de enlace siguientes: BindingFlags.InvokeMethod, , BindingFlags.GetPropertyBindingFlags.SetProperty, BindingFlags.PutDispPropertyo BindingFlags.PutRefDispProperty.

O bien

Una de las matrices de parámetros con nombre contiene una cadena que es null.

El miembro especificado es un inicializador de clase.

No se encuentra el campo o la propiedad.

No se puede encontrar ningún método que coincida con los argumentos de args.

O bien

No se puede encontrar ningún miembro que tenga los nombres de argumento proporcionados en namedParameters.

O bien

El objeto actual Type representa un tipo que contiene parámetros de tipo abierto, es decir, ContainsGenericParameters devuelve true.

El miembro especificado no se puede invocar en target.

Más de un método coincide con los criterios de enlace.

El método representado por name tiene uno o varios parámetros de tipo genérico no especificados. Es decir, la propiedad del ContainsGenericParameters método devuelve true.

Comentarios

InvokeMember llama a un miembro de constructor o a un miembro de método, obtiene o establece un miembro de propiedad, obtiene o establece un miembro de campo de datos, u obtiene o establece un elemento de un miembro de matriz.

Nota:

No se puede usar InvokeMember para invocar un método genérico.

Al invocar un IDispatch miembro, puede especificar dispID en lugar del nombre del miembro, con el formato de cadena "[DispID=##]". Por ejemplo, si el DispID de MyComMethod es 3, puede especificar la cadena "[DispID=3]" en lugar de "MyComMethod". Invocar un miembro por DispID es más rápido que buscar el miembro por nombre. En escenarios de agregación complejos, dispID a veces es la única manera de invocar el miembro deseado.

Aunque el enlazador predeterminado no procesa ParameterModifier ni (los modifiers parámetros yculture), puede usar la clase abstracta System.Reflection.Binder para escribir un enlazador personalizado que procesa modifiers y cultureCultureInfo . ParameterModifier solo se usa cuando se llama mediante la interoperabilidad COM y solo se controlan parámetros que se pasan por referencia.

Cada parámetro de la namedParameters matriz obtiene el valor del elemento correspondiente de la args matriz. Si la longitud de args es mayor que la longitud de namedParameters, los valores de argumento restantes se pasan en orden.

La namedParameters matriz se puede usar para cambiar el orden de los argumentos de una matriz de entrada. Por ejemplo, dado el método M(string a, int b) (M(ByVal a As String, ByVal b As Integer) en Visual Basic) y la matriz de entrada { 42, "x" }, la matriz de entrada se puede pasar sin cambios a args si la matriz { "b", "a" } se proporciona para namedParameters.

Las marcas de filtro siguientes BindingFlags se pueden usar para definir qué miembros incluir en la búsqueda:

  • Especifique BindingFlags.Public para incluir miembros públicos en la búsqueda.

  • Especifique BindingFlags.NonPublic para incluir miembros no públicos (es decir, miembros privados, internos y protegidos) en la búsqueda.

  • Especifique BindingFlags.FlattenHierarchy para incluir miembros estáticos en la jerarquía.

Se pueden usar las marcas modificadores siguientes BindingFlags para cambiar el funcionamiento de la búsqueda:

  • BindingFlags.IgnoreCase para pasar por alto el caso de name.

  • BindingFlags.DeclaredOnly para buscar solo los miembros declarados en , Typeno los miembros que simplemente se heredaron.

Las marcas de invocación siguientes BindingFlags se pueden usar para indicar qué acción realizar con el miembro:

  • CreateInstance para invocar un constructor. name se omite. No es válido con otras marcas de invocación.

  • InvokeMethod para invocar un método, pero no un constructor o un inicializador de tipo. No es válido con SetField o SetProperty. Si InvokeMethod se especifica por sí mismo, BindingFlags.Publicse incluyen automáticamente , BindingFlags.Instancey BindingFlags.Static .

  • GetField para obtener el valor de un campo. No es válido con SetField.

  • SetField para establecer el valor de un campo. No es válido con GetField.

  • GetProperty para obtener una propiedad. No es válido con SetProperty.

  • SetProperty para establecer una propiedad. No es válido con GetProperty.

Consulte System.Reflection.BindingFlags para obtener más información.

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 args matriz (a menos que se definan argumentos predeterminados en el miembro y BindingFlags.OptionalParamBinding se especifique).

  • 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 valores InvokeMethod, GetProperty, 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. 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 de la Binder clase es responsable de seleccionar el método que se va a invocar. El enlazador predeterminado selecciona la coincidencia más específica.

InvokeMember se puede usar para invocar métodos con parámetros que tienen valores predeterminados. Para enlazar a estos métodos, reflection debe BindingFlags.OptionalParamBinding especificarse. Para un parámetro que tiene un valor predeterminado, puede proporcionar un valor diferente o proporcionar Missing.Value para usar el valor predeterminado.

Por ejemplo, considere un método como MyMethod(int x, float y = 2.0). Para invocar este método con solo el primer argumento como MyMethod(4), pase una de las marcas de enlace anteriores y pase dos argumentos, es decir, 4 para el primer argumento y Missing.Value para el segundo argumento. A menos que use Missing.Value, es posible que no omita parámetros opcionales con el Invoke método . Si debe hacerlo, use InvokeMember en su lugar.

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 System.Reflection de cada vez que el código es de plena confianza.

Puede usar Type.InvokeMember para establecer un campo en un valor determinado especificando BindingFlags.SetField. Por ejemplo, si desea establecer un campo de instancia pública denominado F en la clase C y F es un String, puede usar código como:

typeof(C).InvokeMember("F", BindingFlags.SetField, null, c, new Object[] {"strings new value"}, null, null, null);

Si F es , String[]puede usar código como:

typeof(C).InvokeMember("F", BindingFlags.SetField, null, c, new Object[] {new String[]{"a","z","c","d"}}, null, null, null);

que inicializará el campo F en esta nueva matriz. También puede usar Type.InvokeMember para establecer una posición en una matriz proporcionando el índice del valor y, a continuación, el siguiente valor mediante código como el siguiente:

typeof(C).InvokeMember("F", BindingFlags.SetField, null, c, new Object[] {1, "b"}, null, null, null);

Esto cambiará la cadena "z" de la matriz que F contiene a la cadena "b".

Nota:

Este método se puede usar para acceder a miembros no públicos si se ha concedido ReflectionPermission al autor de la llamada con la ReflectionPermissionFlag.RestrictedMemberAccess marca y si el conjunto de concesión de los miembros no públicos está restringido al conjunto de concesión del autor de la llamada o a un subconjunto de ellos. (Consulte Consideraciones de seguridad para la reflexión).

Para usar esta funcionalidad, la aplicación debe tener como destino la .NET Framework 3.5 o posterior.

Consulte también

Se aplica a

InvokeMember(String, BindingFlags, Binder, Object, Object[], CultureInfo)

Source:
Type.cs
Source:
Type.cs
Source:
Type.cs
Source:
Type.cs
Source:
Type.cs

Invoca al miembro especificado mediante las restricciones de enlace especificadas y coincide con la lista de argumentos y la referencia cultural especificadas.

public:
 System::Object ^ InvokeMember(System::String ^ name, System::Reflection::BindingFlags invokeAttr, System::Reflection::Binder ^ binder, System::Object ^ target, cli::array <System::Object ^> ^ args, System::Globalization::CultureInfo ^ culture);
public:
 virtual System::Object ^ InvokeMember(System::String ^ name, System::Reflection::BindingFlags invokeAttr, System::Reflection::Binder ^ binder, System::Object ^ target, cli::array <System::Object ^> ^ args, System::Globalization::CultureInfo ^ culture);
[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.Globalization.CultureInfo? culture);
[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.Globalization.CultureInfo? culture);
public object InvokeMember(string name, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder binder, object target, object[] args, System.Globalization.CultureInfo culture);
public object? InvokeMember(string name, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder? binder, object? target, object?[]? args, System.Globalization.CultureInfo? culture);
[<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)>]
member this.InvokeMember : string * System.Reflection.BindingFlags * System.Reflection.Binder * obj * obj[] * System.Globalization.CultureInfo -> obj
[<System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.All)>]
member this.InvokeMember : string * System.Reflection.BindingFlags * System.Reflection.Binder * obj * obj[] * System.Globalization.CultureInfo -> obj
member this.InvokeMember : string * System.Reflection.BindingFlags * System.Reflection.Binder * obj * obj[] * System.Globalization.CultureInfo -> obj
abstract member InvokeMember : string * System.Reflection.BindingFlags * System.Reflection.Binder * obj * obj[] * System.Globalization.CultureInfo -> obj
override this.InvokeMember : string * System.Reflection.BindingFlags * System.Reflection.Binder * obj * obj[] * System.Globalization.CultureInfo -> obj
Public Function InvokeMember (name As String, invokeAttr As BindingFlags, binder As Binder, target As Object, args As Object(), culture As CultureInfo) As Object

Parámetros

name
String

Cadena que contiene el nombre del constructor, el método, la propiedad o el miembro de campo que se va a invocar.

O bien

Cadena vacía ("") para invocar el miembro predeterminado.

O bien

Para IDispatch los miembros, una cadena que representa el DispID, por ejemplo "[DispID=3]".

invokeAttr
BindingFlags

Combinación bit a bit de los valores de enumeración que especifican cómo se realiza la búsqueda. El acceso puede ser uno de los BindingFlags elementos como Public, NonPublic, Private, InvokeMethod, GetFieldetc. No es necesario especificar el tipo de búsqueda. Si se omite el tipo de búsqueda, BindingFlags.Public | | BindingFlags.InstanceBindingFlags.Static se usan.

binder
Binder

Objeto que define un conjunto de propiedades y habilita el enlace, que puede implicar la selección de un método sobrecargado, la coerción de tipos de argumentos y la invocación de un miembro a través de la reflexión.

O bien

Referencia nula (Nothing en Visual Basic), para usar el DefaultBinder. Tenga en cuenta que puede ser necesario definir explícitamente un Binder objeto para invocar correctamente sobrecargas de método con argumentos variables.

target
Object

Objeto en el que se va a invocar el miembro especificado.

args
Object[]

Matriz que contiene los argumentos que se van a pasar al miembro que se va a invocar.

culture
CultureInfo

Objeto que representa la configuración regional de globalización que se va a usar, lo que puede ser necesario para conversiones específicas de la configuración regional, como convertir un valor numérico String en .Double

O bien

Referencia nula (Nothing en Visual Basic) para usar el CultureInfo del subproceso actual.

Devoluciones

Objeto que representa el valor devuelto del miembro invocado.

Implementaciones

Atributos

Excepciones

invokeAttr no contiene CreateInstance y name es null.

invokeAttr no es un atributo válido BindingFlags .

O bien

invokeAttr no contiene una de las marcas de enlace siguientes: InvokeMethod, CreateInstance, GetField, SetField, GetPropertyo SetProperty.

O bien

invokeAttr contiene CreateInstance combinado con InvokeMethod, GetField, SetField, GetPropertyo SetProperty.

O bien

invokeAttr contiene y GetFieldSetField.

O bien

invokeAttr contiene y GetPropertySetProperty.

O bien

invokeAttr contiene InvokeMethod combinado con SetField o SetProperty.

O bien

invokeAttr contiene SetField y args tiene más de un elemento.

O bien

Este método se llama en un objeto COM y no se pasó una de las marcas de enlace siguientes: BindingFlags.InvokeMethod, , BindingFlags.GetPropertyBindingFlags.SetProperty, BindingFlags.PutDispPropertyo BindingFlags.PutRefDispProperty.

O bien

Una de las matrices de parámetros con nombre contiene una cadena que es null.

El miembro especificado es un inicializador de clase.

No se encuentra el campo o la propiedad.

No se puede encontrar ningún método que coincida con los argumentos de args.

O bien

El objeto actual Type representa un tipo que contiene parámetros de tipo abierto, es decir, ContainsGenericParameters devuelve true.

El miembro especificado no se puede invocar en target.

Más de un método coincide con los criterios de enlace.

El método representado por name tiene uno o varios parámetros de tipo genérico no especificados. Es decir, la propiedad del ContainsGenericParameters método devuelve true.

Comentarios

Aunque el enlazador predeterminado no procesa CultureInfo (el culture parámetro ), puede usar la clase abstracta System.Reflection.Binder para escribir un enlazador personalizado que procesa culture.

Nota:

No se puede usar InvokeMember para invocar un método genérico.

Las marcas de filtro siguientes BindingFlags se pueden usar para definir qué miembros incluir en la búsqueda:

  • Especifique BindingFlags.Public para incluir miembros públicos en la búsqueda.

  • Especifique BindingFlags.NonPublic para incluir miembros no públicos (es decir, miembros privados, internos y protegidos) en la búsqueda.

  • Especifique BindingFlags.FlattenHierarchy para incluir miembros estáticos en la jerarquía.

Se pueden usar las marcas modificadores siguientes BindingFlags para cambiar el funcionamiento de la búsqueda:

  • BindingFlags.IgnoreCase para pasar por alto el caso de name.

  • BindingFlags.DeclaredOnly para buscar solo los miembros declarados en , Typeno los miembros que simplemente se heredaron.

Las marcas de invocación siguientes BindingFlags se pueden usar para indicar qué acción realizar con el miembro:

  • CreateInstance para invocar un constructor. name se omite. No es válido con otras marcas de invocación.

  • InvokeMethod para invocar un método, pero no un constructor o un inicializador de tipo. No es válido con SetField o SetProperty. Si InvokeMethod se especifica por sí mismo, BindingFlags.Publicse incluyen automáticamente , BindingFlags.Instancey BindingFlags.Static .

  • GetField para obtener el valor de un campo. No es válido con SetField.

  • SetField para establecer el valor de un campo. No es válido con GetField.

  • GetProperty para obtener una propiedad. No es válido con SetProperty.

  • SetProperty para establecer una propiedad. No es válido con GetProperty.

Consulte System.Reflection.BindingFlags para obtener más información.

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 args matriz (a menos que se definan argumentos predeterminados en el miembro y BindingFlags.OptionalParamBinding se especifique).

  • 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 valores InvokeMethod, GetProperty, 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. 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 de la Binder clase es responsable de seleccionar 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 Reflection siempre que el código sea de plena confianza.

Puede usar Type.InvokeMember para establecer un campo en un valor determinado especificando BindingFlags.SetField. Por ejemplo, si desea establecer un campo de instancia pública denominado F en la clase C y F es un String código como:

typeof(C).InvokeMember("F", BindingFlags.SetField, null, c, new Object[] {"strings new value"}, null);

Si F es , String[]puede usar código como:

typeof(C).InvokeMember("F", BindingFlags.SetField, null, c, new Object[] {new String[]{"a","z","c","d"}}, null);

que inicializará el campo F en esta nueva matriz. También puede usar Type.InvokeMember para establecer una posición en una matriz proporcionando el índice del valor y, a continuación, el siguiente valor mediante código como el siguiente:

typeof(C).InvokeMember("F", BindingFlags.SetField, null, c, new Object[] {1, "b"}, null);

Esto cambiará la cadena "z" de la matriz que F contiene a la cadena "b".

Al invocar un IDispatch miembro, puede especificar dispID en lugar del nombre del miembro, con el formato de cadena "[DispID=##]". Por ejemplo, si el DispID de MyComMethod es 3, puede especificar la cadena "[DispID=3]" en lugar de "MyComMethod". Invocar un miembro por DispID es más rápido que buscar el miembro por nombre. En escenarios de agregación complejos, dispID a veces es la única manera de invocar el miembro deseado.

Nota:

Este método se puede usar para acceder a miembros no públicos si se ha concedido ReflectionPermission al autor de la llamada con la ReflectionPermissionFlag.RestrictedMemberAccess marca y si el conjunto de concesión de los miembros no públicos está restringido al conjunto de concesión del autor de la llamada o a un subconjunto de ellos. (Consulte Consideraciones de seguridad para la reflexión).

Para usar esta funcionalidad, la aplicación debe tener como destino la .NET Framework 3.5 o posterior.

Consulte también

Se aplica a

InvokeMember(String, BindingFlags, Binder, Object, Object[])

Source:
Type.cs
Source:
Type.cs
Source:
Type.cs
Source:
Type.cs
Source:
Type.cs

Invoca al miembro especificado mediante las restricciones de enlace especificadas y coincide con la lista de argumentos especificada.

public:
 System::Object ^ InvokeMember(System::String ^ name, System::Reflection::BindingFlags invokeAttr, System::Reflection::Binder ^ binder, System::Object ^ target, cli::array <System::Object ^> ^ args);
public:
 virtual System::Object ^ InvokeMember(System::String ^ name, System::Reflection::BindingFlags invokeAttr, System::Reflection::Binder ^ binder, System::Object ^ target, cli::array <System::Object ^> ^ args);
[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.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);
public object InvokeMember(string name, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder binder, object target, object[] args);
public object? InvokeMember(string name, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder? binder, object? target, object?[]? args);
[<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)>]
member this.InvokeMember : string * System.Reflection.BindingFlags * System.Reflection.Binder * obj * obj[] -> obj
[<System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.All)>]
member this.InvokeMember : string * System.Reflection.BindingFlags * System.Reflection.Binder * obj * obj[] -> obj
member this.InvokeMember : string * System.Reflection.BindingFlags * System.Reflection.Binder * obj * obj[] -> obj
abstract member InvokeMember : string * System.Reflection.BindingFlags * System.Reflection.Binder * obj * obj[] -> obj
override this.InvokeMember : string * System.Reflection.BindingFlags * System.Reflection.Binder * obj * obj[] -> obj
Public Function InvokeMember (name As String, invokeAttr As BindingFlags, binder As Binder, target As Object, args As Object()) As Object

Parámetros

name
String

Cadena que contiene el nombre del constructor, el método, la propiedad o el miembro de campo que se va a invocar.

O bien

Cadena vacía ("") para invocar el miembro predeterminado.

O bien

Para IDispatch los miembros, una cadena que representa el DispID, por ejemplo "[DispID=3]".

invokeAttr
BindingFlags

Combinación bit a bit de los valores de enumeración que especifican cómo se realiza la búsqueda. El acceso puede ser uno de los BindingFlags elementos como Public, NonPublic, Private, InvokeMethod, GetFieldetc. No es necesario especificar el tipo de búsqueda. Si se omite el tipo de búsqueda, BindingFlags.Public | | BindingFlags.InstanceBindingFlags.Static se usan.

binder
Binder

Objeto que define un conjunto de propiedades y habilita el enlace, que puede implicar la selección de un método sobrecargado, la coerción de tipos de argumentos y la invocación de un miembro a través de la reflexión.

O bien

Referencia nula (Nothing en Visual Basic), para usar el DefaultBinder. Tenga en cuenta que puede ser necesario definir explícitamente un Binder objeto para invocar correctamente sobrecargas de método con argumentos variables.

target
Object

Objeto en el que se va a invocar el miembro especificado.

args
Object[]

Matriz que contiene los argumentos que se van a pasar al miembro que se va a invocar.

Devoluciones

Objeto que representa el valor devuelto del miembro invocado.

Implementaciones

Atributos

Excepciones

invokeAttr no contiene CreateInstance y name es null.

invokeAttr no es un atributo válido BindingFlags .

O bien

invokeAttr no contiene una de las marcas de enlace siguientes: InvokeMethod, CreateInstance, GetField, SetField, GetPropertyo SetProperty.

O bien

invokeAttr contiene CreateInstance combinado con InvokeMethod, GetField, SetField, GetPropertyo SetProperty.

O bien

invokeAttr contiene y GetFieldSetField.

O bien

invokeAttr contiene y GetPropertySetProperty.

O bien

invokeAttr contiene InvokeMethod combinado con SetField o SetProperty.

O bien

invokeAttr contiene SetField y args tiene más de un elemento.

O bien

Este método se llama en un objeto COM y no se pasó una de las marcas de enlace siguientes: BindingFlags.InvokeMethod, , BindingFlags.GetPropertyBindingFlags.SetProperty, BindingFlags.PutDispPropertyo BindingFlags.PutRefDispProperty.

O bien

Una de las matrices de parámetros con nombre contiene una cadena que es null.

El miembro especificado es un inicializador de clase.

No se encuentra el campo o la propiedad.

No se puede encontrar ningún método que coincida con los argumentos de args.

O bien

El objeto actual Type representa un tipo que contiene parámetros de tipo abierto, es decir, ContainsGenericParameters devuelve true.

El miembro especificado no se puede invocar en target.

Más de un método coincide con los criterios de enlace.

El .NET Compact Framework no admite actualmente este método.

El método representado por name tiene uno o varios parámetros de tipo genérico no especificados. Es decir, la propiedad del ContainsGenericParameters método devuelve true.

Ejemplos

En el ejemplo siguiente se usa InvokeMember para acceder a los miembros de un tipo.

using System;
using System.Reflection;

// This sample class has a field, constructor, method, and property.
class MyType
{
    Int32 myField;
    public MyType(ref Int32 x) {x *= 5;}
    public override String ToString() {return myField.ToString();}
    public Int32 MyProp
    {
        get {return myField;}
        set
        {
            if (value < 1)
                throw new ArgumentOutOfRangeException("value", value, "value must be > 0");
            myField = value;
        }
    }
}

class MyApp
{
    static void Main()
    {
        Type t = typeof(MyType);
        // Create an instance of a type.
        Object[] args = new Object[] {8};
        Console.WriteLine("The value of x before the constructor is called is {0}.", args[0]);
        Object obj = t.InvokeMember(null,
            BindingFlags.DeclaredOnly |
            BindingFlags.Public | BindingFlags.NonPublic |
            BindingFlags.Instance | BindingFlags.CreateInstance, null, null, args);
        Console.WriteLine("Type: " + obj.GetType().ToString());
        Console.WriteLine("The value of x after the constructor returns is {0}.", args[0]);

        // Read and write to a field.
        t.InvokeMember("myField",
            BindingFlags.DeclaredOnly |
            BindingFlags.Public | BindingFlags.NonPublic |
            BindingFlags.Instance | BindingFlags.SetField, null, obj, new Object[] {5});
        Int32 v = (Int32) t.InvokeMember("myField",
            BindingFlags.DeclaredOnly |
            BindingFlags.Public | BindingFlags.NonPublic |
            BindingFlags.Instance | BindingFlags.GetField, null, obj, null);
        Console.WriteLine("myField: " + v);

        // Call a method.
        String s = (String) t.InvokeMember("ToString",
            BindingFlags.DeclaredOnly |
            BindingFlags.Public | BindingFlags.NonPublic |
            BindingFlags.Instance | BindingFlags.InvokeMethod, null, obj, null);
        Console.WriteLine("ToString: " + s);

        // Read and write a property. First, attempt to assign an
        // invalid value; then assign a valid value; finally, get
        // the value.
        try
        {
            // Assign the value zero to MyProp. The Property Set
            // throws an exception, because zero is an invalid value.
            // InvokeMember catches the exception, and throws
            // TargetInvocationException. To discover the real cause
            // you must catch TargetInvocationException and examine
            // the inner exception.
            t.InvokeMember("MyProp",
                BindingFlags.DeclaredOnly |
                BindingFlags.Public | BindingFlags.NonPublic |
                BindingFlags.Instance | BindingFlags.SetProperty, null, obj, new Object[] {0});
        }
        catch (TargetInvocationException e)
        {
            // If the property assignment failed for some unexpected
            // reason, rethrow the TargetInvocationException.
            if (e.InnerException.GetType() !=
                typeof(ArgumentOutOfRangeException))
                throw;
            Console.WriteLine("An invalid value was assigned to MyProp.");
        }
        t.InvokeMember("MyProp",
            BindingFlags.DeclaredOnly |
            BindingFlags.Public | BindingFlags.NonPublic |
            BindingFlags.Instance | BindingFlags.SetProperty, null, obj, new Object[] {2});
        v = (Int32) t.InvokeMember("MyProp",
            BindingFlags.DeclaredOnly |
            BindingFlags.Public | BindingFlags.NonPublic |
            BindingFlags.Instance | BindingFlags.GetProperty, null, obj, null);
        Console.WriteLine("MyProp: " + v);
    }
}
open System
open System.Reflection

// This sample class has a field, constructor, method, and property.
type MyType() =
    let mutable myField = 0

    member _.MyType(x: int byref) =
        x <- x * 5
    
    override _.ToString() =
        string myField
    
    member _.MyProp
        with get () = myField
        and set value =
            if value < 1 then
                raise (ArgumentOutOfRangeException("value", value, "value must be > 0"))
            myField <- value

let t = typeof<MyType>
// Create an instance of a type.
let args = Array.zeroCreate<obj> 8
printfn $"The value of x before the constructor is called is {args[0]}."
let obj = t.InvokeMember(null,
    BindingFlags.DeclaredOnly |||
    BindingFlags.Public ||| BindingFlags.NonPublic |||
    BindingFlags.Instance ||| BindingFlags.CreateInstance, null, null, args)
printfn $"Type: {obj.GetType()}"
printfn $"The value of x after the constructor returns is {args[0]}."

// Read and write to a field.
t.InvokeMember("myField",
    BindingFlags.DeclaredOnly |||
    BindingFlags.Public ||| BindingFlags.NonPublic |||
    BindingFlags.Instance ||| BindingFlags.SetField, null, obj, Array.zeroCreate<obj> 5) |> ignore
let v = t.InvokeMember("myField",
    BindingFlags.DeclaredOnly |||
    BindingFlags.Public ||| BindingFlags.NonPublic |||
    BindingFlags.Instance ||| BindingFlags.GetField, null, obj, null) :?> int
printfn $"myField: {v}"

// Call a method.
let s = t.InvokeMember("ToString",
    BindingFlags.DeclaredOnly |||
    BindingFlags.Public ||| BindingFlags.NonPublic |||
    BindingFlags.Instance ||| BindingFlags.InvokeMethod, null, obj, null) :?> string
printfn $"ToString: {s}"

// Read and write a property. First, attempt to assign an
// invalid value then assign a valid value finally, get
// the value.
try
    // Assign the value zero to MyProp. The Property Set
    // throws an exception, because zero is an invalid value.
    // InvokeMember catches the exception, and throws
    // TargetInvocationException. To discover the real cause
    // you must catch TargetInvocationException and examine
    // the inner exception.
    t.InvokeMember("MyProp",
        BindingFlags.DeclaredOnly |||
        BindingFlags.Public ||| BindingFlags.NonPublic |||
        BindingFlags.Instance ||| BindingFlags.SetProperty, null, obj, Array.zeroCreate<obj> 0) |> ignore
with :? TargetInvocationException as e ->
    // If the property assignment failed for some unexpected
    // reason, rethrow the TargetInvocationException.
    if e.InnerException.GetType() <> typeof<ArgumentOutOfRangeException> then
        reraise ()
    printfn "An invalid value was assigned to MyProp."
t.InvokeMember("MyProp",
    BindingFlags.DeclaredOnly |||
    BindingFlags.Public ||| BindingFlags.NonPublic |||
    BindingFlags.Instance ||| BindingFlags.SetProperty, null, obj, Array.zeroCreate<obj> 2) |> ignore
let v2 = t.InvokeMember("MyProp",
    BindingFlags.DeclaredOnly |||
    BindingFlags.Public ||| BindingFlags.NonPublic |||
    BindingFlags.Instance ||| BindingFlags.GetProperty, null, obj, null)
printfn $"MyProp: {v2}"
Imports System.Reflection

' This sample class has a field, constructor, method, and property.
Class MyType
    Private myField As Int32

    Public Sub New(ByRef x As Int32)
        x *= 5
    End Sub

    Public Overrides Function ToString() As [String]
        Return myField.ToString()
    End Function 'ToString

    Public Property MyProp() As Int32
        Get
            Return myField
        End Get
        Set(ByVal Value As Int32)
            If Value < 1 Then
                Throw New ArgumentOutOfRangeException("value", Value, "value must be > 0")
            End If
            myField = Value
        End Set
    End Property
End Class

Class MyApp

    Shared Sub Main()
        Dim t As Type = GetType(MyType)
        ' Create an instance of a type.
        Dim args() As [Object] = {8}
        Console.WriteLine("The value of x before the constructor is called is {0}.", args(0))
        Dim obj As [Object] = t.InvokeMember(Nothing, BindingFlags.DeclaredOnly Or BindingFlags.Public Or BindingFlags.NonPublic Or BindingFlags.Instance Or BindingFlags.CreateInstance, Nothing, Nothing, args)
        Console.WriteLine("Type: {0}", obj.GetType().ToString())
        Console.WriteLine("The value of x after the constructor returns is {0}.", args(0))

        ' Read and write to a field.
        t.InvokeMember("myField", BindingFlags.DeclaredOnly Or BindingFlags.Public Or BindingFlags.NonPublic Or BindingFlags.Instance Or BindingFlags.SetField, Nothing, obj, New [Object]() {5})
        Dim v As Int32 = CType(t.InvokeMember("myField", BindingFlags.DeclaredOnly Or BindingFlags.Public Or BindingFlags.NonPublic Or BindingFlags.Instance Or BindingFlags.GetField, Nothing, obj, Nothing), Int32)
        Console.WriteLine("myField: {0}", v)

        ' Call a method.
        Dim s As [String] = CType(t.InvokeMember("ToString", BindingFlags.DeclaredOnly Or BindingFlags.Public Or BindingFlags.NonPublic Or BindingFlags.Instance Or BindingFlags.InvokeMethod, Nothing, obj, Nothing), [String])
        Console.WriteLine("ToString: {0}", s)

        ' Read and write a property. First, attempt to assign an
        ' invalid value; then assign a valid value; finally, get
        ' the value.
        Try
            ' Assign the value zero to MyProp. The Property Set 
            ' throws an exception, because zero is an invalid value.
            ' InvokeMember catches the exception, and throws 
            ' TargetInvocationException. To discover the real cause
            ' you must catch TargetInvocationException and examine
            ' the inner exception. 
            t.InvokeMember("MyProp", BindingFlags.DeclaredOnly Or BindingFlags.Public Or BindingFlags.NonPublic Or BindingFlags.Instance Or BindingFlags.SetProperty, Nothing, obj, New [Object]() {0})
        Catch e As TargetInvocationException
            ' If the property assignment failed for some unexpected
            ' reason, rethrow the TargetInvocationException.
            If Not e.InnerException.GetType() Is GetType(ArgumentOutOfRangeException) Then
                Throw
            End If
            Console.WriteLine("An invalid value was assigned to MyProp.")
        End Try
        t.InvokeMember("MyProp", BindingFlags.DeclaredOnly Or BindingFlags.Public Or BindingFlags.NonPublic Or BindingFlags.Instance Or BindingFlags.SetProperty, Nothing, obj, New [Object]() {2})
        v = CType(t.InvokeMember("MyProp", BindingFlags.DeclaredOnly Or BindingFlags.Public Or BindingFlags.NonPublic Or BindingFlags.Instance Or BindingFlags.GetProperty, Nothing, obj, Nothing), Int32)
        Console.WriteLine("MyProp: {0}", v)
    End Sub
End Class

Comentarios

Nota:

No se puede usar InvokeMember para invocar un método genérico.

Las marcas de filtro siguientes BindingFlags se pueden usar para definir qué miembros incluir en la búsqueda:

  • Especifique BindingFlags.Public para incluir miembros públicos en la búsqueda.

  • Especifique BindingFlags.NonPublic para incluir miembros no públicos (es decir, miembros privados y protegidos) en la búsqueda.

  • Especifique BindingFlags.FlattenHierarchy para incluir miembros estáticos en la jerarquía.

Se pueden usar las marcas modificadores siguientes BindingFlags para cambiar el funcionamiento de la búsqueda:

  • BindingFlags.IgnoreCase para pasar por alto el caso de name.

  • BindingFlags.DeclaredOnly para buscar solo los miembros declarados en , Typeno los miembros que simplemente se heredaron.

Las marcas de invocación siguientes BindingFlags se pueden usar para indicar qué acción realizar con el miembro:

  • CreateInstance para invocar un constructor. name se omite. No es válido con otras marcas de invocación.

  • InvokeMethod para invocar un método, pero no un constructor o un inicializador de tipo. No es válido con SetField o SetProperty. Si InvokeMethod se especifica por sí mismo, BindingFlags.Publicse incluyen automáticamente , BindingFlags.Instancey BindingFlags.Static .

  • GetField para obtener el valor de un campo. No es válido con SetField.

  • SetField para establecer el valor de un campo. No es válido con GetField.

  • GetProperty para obtener una propiedad. No es válido con SetProperty.

  • SetProperty para establecer una propiedad. No es válido con GetProperty.

Consulte System.Reflection.BindingFlags para obtener más información.

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 args matriz (a menos que se definan argumentos predeterminados en el miembro y BindingFlags.OptionalParamBinding se especifique).

  • 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 valores InvokeMethod, GetProperty, 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. 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 de la Binder clase es responsable de seleccionar 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 System.Reflection de cada vez que el código es de plena confianza.

Puede usar Type.InvokeMember para establecer un campo en un valor determinado especificando BindingFlags.SetField. Por ejemplo, si desea establecer un campo de instancia pública denominado F en la clase C y F es un String, puede usar código como:

typeof(C).InvokeMember("F", BindingFlags.SetField, null, c, new Object[] {"strings new value"});

Si F es , String[]puede usar código como:

typeof(C).InvokeMember("F", BindingFlags.SetField, null, c, new Object[] {new String[]{"a","z","c","d"}});

que inicializará el campo F en esta nueva matriz. También puede usar Type.InvokeMember para establecer una posición en una matriz proporcionando el índice del valor y, a continuación, el siguiente valor mediante código como el siguiente:

typeof(C).InvokeMember("F", BindingFlags.SetField, null, c, new Object[] {1, "b"});

Esto cambiará la cadena "z" de la matriz que F contiene a la cadena "b".

Al invocar un IDispatch miembro, puede especificar DispID en lugar del nombre del miembro, con el formato de cadena "[DispID=##]". Por ejemplo, si el DispID de MyComMethod es 3, puede especificar la cadena "[DispID=3]" en lugar de "MyComMethod". Invocar un miembro por DispID es más rápido que buscar el miembro por nombre. En escenarios de agregación complejos, dispID a veces es la única manera de invocar el miembro deseado.

Nota:

Este método se puede usar para acceder a miembros no públicos si se ha concedido ReflectionPermission al autor de la llamada con la ReflectionPermissionFlag.RestrictedMemberAccess marca y si el conjunto de concesión de los miembros no públicos está restringido al conjunto de concesión del autor de la llamada o a un subconjunto de ellos. (Consulte Consideraciones de seguridad para la reflexión).

Para usar esta funcionalidad, la aplicación debe tener como destino .NET Framework 3.5 o posterior.

Consulte también

Se aplica a