Type.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 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.Publicpara incluir miembros públicos en la búsqueda.Especifique
BindingFlags.NonPublicpara incluir miembros no públicos (es decir, miembros privados, internos y protegidos) en la búsqueda.Especifique
BindingFlags.FlattenHierarchypara 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.IgnoreCasepara pasar por alto el caso dename.BindingFlags.DeclaredOnlypara 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:
CreateInstancepara invocar un constructor.namese omite. No es válido con otras marcas de invocación.InvokeMethodpara invocar un método, pero no un constructor o un inicializador de tipo. No es válido conSetFieldoSetProperty. SiInvokeMethodse especifica por sí mismo,BindingFlags.Publicse incluyen automáticamente ,BindingFlags.InstanceyBindingFlags.Static.GetFieldpara obtener el valor de un campo. No es válido conSetField.SetFieldpara establecer el valor de un campo. No es válido conGetField.GetPropertypara obtener una propiedad. No es válido conSetProperty.SetPropertypara establecer una propiedad. No es válido conGetProperty.
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
argsmatriz (a menos que se definan argumentos predeterminados en el miembro yBindingFlags.OptionalParamBindingse 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
- String
- Binder
- DefaultBinder
- BindingFlags
- ParameterModifier
- ParameterAttributes
- CultureInfo
- ReflectionPermission
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.Publicpara incluir miembros públicos en la búsqueda.Especifique
BindingFlags.NonPublicpara incluir miembros no públicos (es decir, miembros privados, internos y protegidos) en la búsqueda.Especifique
BindingFlags.FlattenHierarchypara 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.IgnoreCasepara pasar por alto el caso dename.BindingFlags.DeclaredOnlypara 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:
CreateInstancepara invocar un constructor.namese omite. No es válido con otras marcas de invocación.InvokeMethodpara invocar un método, pero no un constructor o un inicializador de tipo. No es válido conSetFieldoSetProperty. SiInvokeMethodse especifica por sí mismo,BindingFlags.Publicse incluyen automáticamente ,BindingFlags.InstanceyBindingFlags.Static.GetFieldpara obtener el valor de un campo. No es válido conSetField.SetFieldpara establecer el valor de un campo. No es válido conGetField.GetPropertypara obtener una propiedad. No es válido conSetProperty.SetPropertypara establecer una propiedad. No es válido conGetProperty.
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
argsmatriz (a menos que se definan argumentos predeterminados en el miembro yBindingFlags.OptionalParamBindingse 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
- String
- Binder
- DefaultBinder
- BindingFlags
- ParameterModifier
- ParameterAttributes
- CultureInfo
- ReflectionPermission
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.Publicpara incluir miembros públicos en la búsqueda.Especifique
BindingFlags.NonPublicpara incluir miembros no públicos (es decir, miembros privados y protegidos) en la búsqueda.Especifique
BindingFlags.FlattenHierarchypara 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.IgnoreCasepara pasar por alto el caso dename.BindingFlags.DeclaredOnlypara 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:
CreateInstancepara invocar un constructor.namese omite. No es válido con otras marcas de invocación.InvokeMethodpara invocar un método, pero no un constructor o un inicializador de tipo. No es válido conSetFieldoSetProperty. SiInvokeMethodse especifica por sí mismo,BindingFlags.Publicse incluyen automáticamente ,BindingFlags.InstanceyBindingFlags.Static.GetFieldpara obtener el valor de un campo. No es válido conSetField.SetFieldpara establecer el valor de un campo. No es válido conGetField.GetPropertypara obtener una propiedad. No es válido conSetProperty.SetPropertypara establecer una propiedad. No es válido conGetProperty.
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
argsmatriz (a menos que se definan argumentos predeterminados en el miembro yBindingFlags.OptionalParamBindingse 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
- String
- Binder
- DefaultBinder
- BindingFlags
- ParameterModifier
- ParameterAttributes
- CultureInfo
- ReflectionPermission