Type.InvokeMember Type.InvokeMember Type.InvokeMember Method

Definición

Invoca a un miembro específico del objeto Type actual.Invokes a specific member of the current Type.

Sobrecargas

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

Cuando se invalida en una clase derivada, invoca al miembro especificado, aplica las restricciones de enlace igualmente especificadas y realiza una comparación con la lista de argumentos, los modificadores y la referencia cultural indicados.When overridden in a derived class, invokes the specified member, using the specified binding constraints and matching the specified argument list, modifiers and culture.

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

Invoca al miembro especificado, aplica las restricciones de enlace igualmente especificadas y compara la lista de argumentos indicada.Invokes the specified member, using the specified binding constraints and matching the specified argument list.

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

Invoca al miembro especificado, aplica las restricciones de enlace especificadas y compara la lista de argumentos y la referencia cultural igualmente especificadas.Invokes the specified member, using the specified binding constraints and matching the specified argument list and culture.

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

Cuando se invalida en una clase derivada, invoca al miembro especificado, aplica las restricciones de enlace igualmente especificadas y realiza una comparación con la lista de argumentos, los modificadores y la referencia cultural indicados.When overridden in a derived class, invokes the specified member, using the specified binding constraints and matching the specified argument list, modifiers and culture.

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);
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);
abstract member InvokeMember : string * System.Reflection.BindingFlags * System.Reflection.Binder * obj * obj[] * System.Reflection.ParameterModifier[] * System.Globalization.CultureInfo * string[] -> obj

Parámetros

name
String String String

Cadena que contiene el nombre del constructor, el método, la propiedad o el miembro de campo al que se va a invocar.The string containing the name of the constructor, method, property, or field member to invoke.

O bien-or- Cadena vacía ("") para llamar al miembro predeterminado.An empty string ("") to invoke the default member.

O bien-or- Para los miembros de IDispatch, cadena que representa el identificador DispID, por ejemplo "[DispID=3]".For IDispatch members, a string representing the DispID, for example "[DispID=3]".

invokeAttr
BindingFlags BindingFlags BindingFlags

Combinación bit a bit de los valores de enumeración que especifican cómo se realiza la búsqueda.A bitwise combination of the enumeration values that specify how the search is conducted. El acceso puede corresponder a uno de los marcadores BindingFlags, como Public, NonPublic, Private, InvokeMethod, GetField, etc.The access can be one of the BindingFlags such as Public, NonPublic, Private, InvokeMethod, GetField, and so on. No es necesario especificar el tipo de búsqueda.The type of lookup need not be specified. Si se omite el tipo de búsqueda, se usan BindingFlags.Public | BindingFlags.Instance | BindingFlags.Static.If the type of lookup is omitted, BindingFlags.Public | BindingFlags.Instance | BindingFlags.Static are used.

binder
Binder Binder Binder

Objeto que define un conjunto de propiedades y permite realizar operaciones de enlace, que pueden incluir la selección de un método sobrecargado, la coerción de tipos de argumentos y la invocación de un miembro mediante reflexión.An object that defines a set of properties and enables binding, which can involve selection of an overloaded method, coercion of argument types, and invocation of a member through reflection.

O bien-or- Referencia nula (Nothing en Visual Basic) para usar la propiedad DefaultBinder.A null reference (Nothing in Visual Basic), to use the DefaultBinder. Observe que la definición explícita de un objeto Binder puede resultar necesaria para llamar correctamente a sobrecargas de método con argumentos variables.Note that explicitly defining a Binder object may be required for successfully invoking method overloads with variable arguments.

target
Object Object Object

Objeto donde debe invocarse al miembro especificado.The object on which to invoke the specified member.

args
Object[]

Matriz que contiene los argumentos que se van a pasar al miembro al cual se va a invocar.An array containing the arguments to pass to the member to invoke.

modifiers
ParameterModifier[]

Matriz de objetos ParameterModifier que representan los atributos asociados al elemento correspondiente de la matriz args.An array of ParameterModifier objects representing the attributes associated with the corresponding element in the args array. Los atributos asociados a un parámetro se almacenan en la firma del miembro.A parameter's associated attributes are stored in the member's signature.

El enlazador predeterminado solo procesa este parámetro cuando se llama a un componente COM.The default binder processes this parameter only when calling a COM component.

culture
CultureInfo CultureInfo CultureInfo

Objeto CultureInfo que representa la configuración regional de globalización que se va a usar, que puede ser necesaria para las conversiones específicas de la configuración regional, como pasar un tipo numérico String a Double.The CultureInfo object representing the globalization locale to use, which may be necessary for locale-specific conversions, such as converting a numeric String to a Double.

o bien-or- Referencia nula (Nothing en Visual Basic) para usar el CultureInfo del subproceso actual.A null reference (Nothing in Visual Basic) to use the current thread's CultureInfo.

namedParameters
String[]

Matriz que contiene los nombres de los parámetros a los que se pasan los valores de la matriz args.An array containing the names of the parameters to which the values in the args array are passed.

Devoluciones

Objeto que representa el valor devuelto del miembro invocado.An object representing the return value of the invoked member.

Implementaciones

Excepciones

invokeAttr no contiene CreateInstance y name es null.invokeAttr does not contain CreateInstance and name is null.

args y modifiers no tienen la misma longitud.args and modifiers do not have the same length.

O bien-or- invokeAttr no es un atributo BindingFlags válido.invokeAttr is not a valid BindingFlags attribute.

O bien-or- invokeAttr no contiene una de las siguientes marcas de enlace: InvokeMethod, CreateInstance, GetField, SetField, GetProperty o SetProperty.invokeAttr does not contain one of the following binding flags: InvokeMethod, CreateInstance, GetField, SetField, GetProperty, or SetProperty.

O bien-or- invokeAttr contiene CreateInstance combinado con InvokeMethod, GetField, SetField, GetProperty o SetProperty.invokeAttr contains CreateInstance combined with InvokeMethod, GetField, SetField, GetProperty, or SetProperty.

O bien-or- invokeAttr contiene tanto GetField como SetField.invokeAttr contains both GetField and SetField.

O bien-or- invokeAttr contiene tanto GetProperty como SetProperty.invokeAttr contains both GetProperty and SetProperty.

O bien-or- invokeAttr contiene InvokeMethod combinado con SetField o SetProperty.invokeAttr contains InvokeMethod combined with SetField or SetProperty.

O bien-or- invokeAttr contiene SetField y args tiene más de un elemento.invokeAttr contains SetField and args has more than one element.

O bien-or- La matriz de parámetros con nombre es mayor que la matriz de argumentos.The named parameter array is larger than the argument array.

O bien-or- Se llama a este método en un objeto COM pero no se pasa una de las siguientes marcas de enlace: BindingFlags.InvokeMethod, BindingFlags.GetProperty, BindingFlags.SetProperty, BindingFlags.PutDispProperty o BindingFlags.PutRefDispProperty.This method is called on a COM object and one of the following binding flags was not passed in: BindingFlags.InvokeMethod, BindingFlags.GetProperty, BindingFlags.SetProperty, BindingFlags.PutDispProperty, or BindingFlags.PutRefDispProperty.

O bien-or- Una de las matrices de parámetros con nombre contiene una cadena que es null.One of the named parameter arrays contains a string that is null.

El miembro especificado es un inicializador de clase.The specified member is a class initializer.

No se encuentran el campo o la propiedad.The field or property cannot be found.

No se encuentra ningún método que coincida con los argumentos en args.No method can be found that matches the arguments in args.

O bien-or- No se puede encontrar ningún miembro con los nombres de argumento proporcionados en namedParameters.No member can be found that has the argument names supplied in namedParameters.

O bien-or- El objeto Type actual representa un tipo que contiene parámetros de tipo abierto, es decir, ContainsGenericParameters devuelve true.The current Type object represents a type that contains open type parameters, that is, ContainsGenericParameters returns true.

No se puede invocar al miembro especificado en target.The specified member cannot be invoked on target.

Más de un método coincide con los criterios de enlace.More than one method matches the binding criteria.

El método representado por name tiene uno o más parámetros de tipo genérico no especificados.The method represented by name has one or more unspecified generic type parameters. Es decir, la propiedad ContainsGenericParameters del método devuelve true.That is, the method's ContainsGenericParameters property returns true.

Comentarios

InvokeMember llama a un miembro de constructor o método, obtiene o establece a un miembro de propiedad, obtiene o establece a un miembro de campo de datos, u Obtiene o establece un elemento de un miembro de la matriz.InvokeMember calls a constructor member or a method member, gets or sets a property member, gets or sets a data field member, or gets or sets an element of an array member.

Nota

No puede usar InvokeMember para invocar un método genérico.You cannot use InvokeMember to invoke a generic method.

Cuando se invoca un IDispatch miembro puede especificar el identificador DispID en lugar del nombre de miembro, con el formato de cadena "[DispID = ##]".When you invoke an IDispatch member you can specify the DispID instead of the member name, using the string format "[DispID=##]". Por ejemplo, si el identificador DispID de MyComMethod es 3, puede especificar la cadena "[DispID = 3]" en lugar de "MyComMethod".For example, if the DispID of MyComMethod is 3, you can specify the string "[DispID=3]" instead of "MyComMethod". Invocar a un miembro por DispID es más rápido que buscar el miembro por su nombre.Invoking a member by DispID is faster than looking up the member by name. En escenarios de agregación compleja, el identificador DispID a veces es la única manera de invocar al miembro deseado.In complex aggregation scenarios, the DispID is sometimes the only way to invoke the desired member.

Aunque el enlazador predeterminado no procesa ParameterModifier o CultureInfo (el modifiers y culture parámetros), puede utilizar la abstracta System.Reflection.Binder clase para escribir un enlazador personalizado que procesan modifiers y culture.Although the default binder does not process ParameterModifier or CultureInfo (the modifiers and culture parameters), you can use the abstract System.Reflection.Binder class to write a custom binder that does process modifiers and culture. ParameterModifier solo se usa cuando se llama mediante la interoperabilidad COM, y se administran solo los parámetros que se pasan por referencia.ParameterModifier is only used when calling through COM interop, and only parameters that are passed by reference are handled.

Cada parámetro de la matriz namedParameters obtiene el valor del elemento correspondiente en la matriz args.Each parameter in the namedParameters array gets the value in the corresponding element in the args array. Si la longitud de args es mayor que la longitud de namedParameters, los valores de argumento restantes se pasan por orden.If the length of args is greater than the length of namedParameters, the remaining argument values are passed in order.

El namedParameters matriz puede usarse para cambiar el orden de los argumentos en una matriz de entrada.The namedParameters array can be used to change the order of arguments in an input array. 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" }, se puede pasar sin cambios a la matriz de entrada args si la matriz { "b", "a" } proporcionado para namedParameters.For example, given the method M(string a, int b) (M(ByVal a As String, ByVal b As Integer) in Visual Basic) and the input array { 42, "x" }, the input array can be passed unchanged to args if the array { "b", "a" } is supplied for namedParameters.

La siguiente BindingFlags las marcas de filtro pueden utilizarse para definir los miembros que se va a incluir en la búsqueda:The following BindingFlags filter flags can be used to define which members to include in the search:

  • Especificar BindingFlags.Public para incluir los miembros públicos en la búsqueda.Specify BindingFlags.Public to include public members in the search.

  • Especificar BindingFlags.NonPublic para incluir los miembros no públicos (es decir, miembros privados, internos y protegidos) en la búsqueda.Specify BindingFlags.NonPublic to include non-public members (that is, private, internal, and protected members) in the search.

  • Especificar BindingFlags.FlattenHierarchy para incluir miembros estáticos en la jerarquía.Specify BindingFlags.FlattenHierarchy to include static members up the hierarchy.

La siguiente BindingFlags cualquier marcador modificador que puede utilizarse para cambiar el funcionamiento de la búsqueda:The following BindingFlags modifier flags can be used to change how the search works:

  • BindingFlags.IgnoreCase para omitir la grafía de name.BindingFlags.IgnoreCase to ignore the case of name.

  • BindingFlags.DeclaredOnly para buscar solo los miembros declarados en el Type, no los miembros que simplemente se han heredado.BindingFlags.DeclaredOnly to search only the members declared on the Type, not members that were simply inherited.

La siguiente BindingFlags indicadores de invocación pueden utilizarse para denotar la acción que realizará con el miembro:The following BindingFlags invocation flags can be used to denote what action to take with the member:

  • CreateInstance para invocar un constructor.CreateInstance to invoke a constructor. name se omite.name is ignored. No es válido con otros indicadores de invocación.Not valid with other invocation flags.

  • InvokeMethod para invocar un método, pero no un constructor o un inicializador de tipo.InvokeMethod to invoke a method, but not a constructor or a type initializer. No es válido con SetField o SetProperty.Not valid with SetField or SetProperty. Si InvokeMethod se especifica por sí mismo, BindingFlags.Public, BindingFlags.Instance, y BindingFlags.Static se incluyen automáticamente.If InvokeMethod is specified by itself, BindingFlags.Public, BindingFlags.Instance, and BindingFlags.Static are automatically included.

  • GetField Para obtener el valor de un campo.GetField to get the value of a field. No es válido con SetField.Not valid with SetField.

  • SetField Para establecer el valor de un campo.SetField to set the value of a field. No es válido con GetField.Not valid with GetField.

  • GetProperty Para obtener una propiedad.GetProperty to get a property. No es válido con SetProperty.Not valid with SetProperty.

  • SetProperty Para establecer una propiedad.SetProperty to set a property. No es válido con GetProperty.Not valid with GetProperty.

Vea System.Reflection.BindingFlags para obtener más información.See System.Reflection.BindingFlags for more information.

Un método se invocará si se cumplen las condiciones siguientes:A method will be invoked if both of the following conditions are true:

  • El número de parámetros en la declaración del método es igual al número de argumentos de la args matriz (a menos que los argumentos predeterminados se definen en el miembro y BindingFlags.OptionalParamBinding se especifica).The number of parameters in the method declaration equals the number of arguments in the args array (unless default arguments are defined on the member and BindingFlags.OptionalParamBinding is specified).

  • El tipo de cada argumento se puede convertir el enlazador para el tipo del parámetro.The type of each argument can be converted by the binder to the type of the parameter.

El enlazador encontrará todos los métodos de coincidencia.The binder will find all of the matching methods. Estos métodos se encuentran en función del tipo de enlace solicitado (BindingFlags valores InvokeMethod, GetProperty, y así sucesivamente).These methods are found based upon the type of binding requested (BindingFlags values InvokeMethod, GetProperty, and so on). El conjunto de métodos se filtra por el nombre, número de argumentos y un conjunto de modificadores de búsqueda definidos en el enlazador.The set of methods is filtered by the name, number of arguments, and a set of search modifiers defined in the binder.

Después de selecciona el método, se invoca.After the method is selected, it is invoked. En ese momento se comprueba la accesibilidad.Accessibility is checked at that point. La búsqueda puede controlar qué conjunto de métodos se buscan en función del atributo de accesibilidad asociado al método.The search may control which set of methods are searched based upon the accessibility attribute associated with the method. El Binder.BindToMethod método de la Binder clase es responsable de seleccionar el método que se debe invocar.The Binder.BindToMethod method of the Binder class is responsible for selecting the method to be invoked. El enlazador predeterminado, selecciona a la coincidencia más específica.The default binder selects the most specific match.

InvokeMember puede usarse para invocar métodos con parámetros que tienen valores predeterminados.InvokeMember can be used to invoke methods with parameters that have default values. Para enlazar a estos métodos, Reflection requiere BindingFlags.OptionalParamBinding especificarse.To bind to these methods, Reflection requires BindingFlags.OptionalParamBinding to be specified. Para un parámetro que tiene un valor predeterminado, puede proporcionar un valor distinto o proporcionar Missing.Value para usar el valor predeterminado.For a parameter that has a default value, you can either supply a different value, or supply Missing.Value to use the default value.

Por ejemplo, considere la posibilidad de un método como MyMethod (int x, float y = 2.0).For example, consider a method such as MyMethod(int x, float y = 2.0). Para invocar este método solamente con el primer argumento como MyMethod (4), pasar uno de los marcadores de enlace anterior y dos argumentos, es decir, 4 para el primer argumento y Missing.Value para el segundo argumento.To invoke this method with only the first argument as MyMethod(4), pass one of the above binding flags and pass two arguments, namely, 4 for the first argument and Missing.Value for the second argument. A menos que use Missing.Value, no se puede omitir los parámetros opcionales con la Invoke método.Unless you use Missing.Value, you may not omit optional parameters with the Invoke method. Si debe hacerlo, use InvokeMember en su lugar.If you must do so, use InvokeMember instead.

Se omiten las restricciones de acceso para el código de plena confianza; es decir, constructores privados, métodos, campos y propiedades pueden se puede obtener acceso y se invoca a través de System.Reflection cada vez que el código es de plena confianza.Access restrictions are ignored for fully trusted code; that is, private constructors, methods, fields, and properties can be accessed and invoked through System.Reflection whenever the code is fully trusted.

Puede usar Type.InvokeMember para establecer un campo en un valor determinado mediante la especificación de BindingFlags.SetField.You can use Type.InvokeMember to set a field to a particular value by specifying BindingFlags.SetField. Por ejemplo, si desea establecer un campo de instancia público llamado F en la clase C y F es un String, puede usar código como:For example, if you want to set a public instance field named F on class C, and F is a String, you can use code such as:

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

Si F es un String[], puede usar código como:If F is a String[], you can use code such as:

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

responsable de inicializar el campo F en esta nueva matriz.which will initialize the field F to this new array. También puede usar Type.InvokeMember para establecer una posición en una matriz proporcionando el índice del valor y, a continuación, en el siguiente valor utilizando código similar al siguiente:You can also use Type.InvokeMember to set a position in an array by supplying the index of the value and then the next value by using code such as the following:

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

Esta operación cambiará la cadena "z" en la matriz que contiene F a la cadena "b".This will change string "z" in the array that F holds to string "b".

Nota

A partir de la .NET Framework 2.0 Service Pack 1.NET Framework 2.0 Service Pack 1, este método puede utilizarse para tener acceso a miembros no públicos, si el llamador tiene concedidos ReflectionPermission con el ReflectionPermissionFlag.RestrictedMemberAccess marca y si el conjunto de permisos de los miembros no públicos se restringe al llamador conceder el conjunto o un subconjunto en ella.Starting with the .NET Framework 2.0 Service Pack 1.NET Framework 2.0 Service Pack 1, this method can be used to access non-public members if the caller has been granted ReflectionPermission with the ReflectionPermissionFlag.RestrictedMemberAccess flag and if the grant set of the non-public members is restricted to the caller's grant set, or a subset thereof. (Consulte consideraciones de seguridad para la reflexión.)(See Security Considerations for Reflection.)

Para utilizar esta funcionalidad, la aplicación debe utilizar .NET Framework 3,5.NET Framework 3.5 o posterior como destino.To use this functionality, your application should target the .NET Framework 3,5.NET Framework 3.5 or later.

Seguridad

ReflectionPermission
Para obtener acceso a miembros no públicos, independientemente de su concesión establecido.for accessing non-public members regardless of their grant set. Enumeración asociada: MemberAccessAssociated enumeration: MemberAccess

SecurityPermission
para llamar a código no administrado.to call unmanaged code. Enumeración asociada: UnmanagedCodeAssociated enumeration: UnmanagedCode

Consulte también:

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

Invoca al miembro especificado, aplica las restricciones de enlace igualmente especificadas y compara la lista de argumentos indicada.Invokes the specified member, using the specified binding constraints and matching the specified argument list.

public:
 virtual System::Object ^ InvokeMember(System::String ^ name, System::Reflection::BindingFlags invokeAttr, System::Reflection::Binder ^ binder, System::Object ^ target, cli::array <System::Object ^> ^ args);
public object InvokeMember (string name, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder binder, object target, object[] args);
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

Parámetros

name
String String String

Cadena que contiene el nombre del constructor, el método, la propiedad o el miembro de campo al que se va a invocar.The string containing the name of the constructor, method, property, or field member to invoke.

O bien-or- Cadena vacía ("") para llamar al miembro predeterminado.An empty string ("") to invoke the default member.

O bien-or- Para los miembros de IDispatch, cadena que representa el identificador DispID, por ejemplo "[DispID=3]".For IDispatch members, a string representing the DispID, for example "[DispID=3]".

invokeAttr
BindingFlags BindingFlags BindingFlags

Combinación bit a bit de los valores de enumeración que especifican cómo se realiza la búsqueda.A bitwise combination of the enumeration values that specify how the search is conducted. El acceso puede corresponder a uno de los marcadores BindingFlags, como Public, NonPublic, Private, InvokeMethod, GetField, etc.The access can be one of the BindingFlags such as Public, NonPublic, Private, InvokeMethod, GetField, and so on. No es necesario especificar el tipo de búsqueda.The type of lookup need not be specified. Si se omite el tipo de búsqueda, se usan BindingFlags.Public | BindingFlags.Instance | BindingFlags.Static.If the type of lookup is omitted, BindingFlags.Public | BindingFlags.Instance | BindingFlags.Static are used.

binder
Binder Binder Binder

Objeto que define un conjunto de propiedades y permite realizar operaciones de enlace, que pueden incluir la selección de un método sobrecargado, la coerción de tipos de argumentos y la invocación de un miembro mediante reflexión.An object that defines a set of properties and enables binding, which can involve selection of an overloaded method, coercion of argument types, and invocation of a member through reflection.

O bien-or- Referencia nula (Nothing en Visual Basic) para usar la propiedad DefaultBinder.A null reference (Nothing in Visual Basic), to use the DefaultBinder. Observe que la definición explícita de un objeto Binder puede resultar necesaria para llamar correctamente a sobrecargas de método con argumentos variables.Note that explicitly defining a Binder object may be required for successfully invoking method overloads with variable arguments.

target
Object Object Object

Objeto donde debe invocarse al miembro especificado.The object on which to invoke the specified member.

args
Object[]

Matriz que contiene los argumentos que se van a pasar al miembro al cual se va a invocar.An array containing the arguments to pass to the member to invoke.

Devoluciones

Objeto que representa el valor devuelto del miembro invocado.An object representing the return value of the invoked member.

Implementaciones

Excepciones

invokeAttr no contiene CreateInstance y name es null.invokeAttr does not contain CreateInstance and name is null.

invokeAttr no es un atributo BindingFlags válido.invokeAttr is not a valid BindingFlags attribute.

O bien-or- invokeAttr no contiene una de las siguientes marcas de enlace: InvokeMethod, CreateInstance, GetField, SetField, GetProperty o SetProperty.invokeAttr does not contain one of the following binding flags: InvokeMethod, CreateInstance, GetField, SetField, GetProperty, or SetProperty.

O bien-or- invokeAttr contiene CreateInstance combinado con InvokeMethod, GetField, SetField, GetProperty o SetProperty.invokeAttr contains CreateInstance combined with InvokeMethod, GetField, SetField, GetProperty, or SetProperty.

O bien-or- invokeAttr contiene tanto GetField como SetField.invokeAttr contains both GetField and SetField.

O bien-or- invokeAttr contiene tanto GetProperty como SetProperty.invokeAttr contains both GetProperty and SetProperty.

O bien-or- invokeAttr contiene InvokeMethod combinado con SetField o SetProperty.invokeAttr contains InvokeMethod combined with SetField or SetProperty.

O bien-or- invokeAttr contiene SetField y args tiene más de un elemento.invokeAttr contains SetField and args has more than one element.

O bien-or- Se llama a este método en un objeto COM pero no se pasa una de las siguientes marcas de enlace: BindingFlags.InvokeMethod, BindingFlags.GetProperty, BindingFlags.SetProperty, BindingFlags.PutDispProperty o BindingFlags.PutRefDispProperty.This method is called on a COM object and one of the following binding flags was not passed in: BindingFlags.InvokeMethod, BindingFlags.GetProperty, BindingFlags.SetProperty, BindingFlags.PutDispProperty, or BindingFlags.PutRefDispProperty.

O bien-or- Una de las matrices de parámetros con nombre contiene una cadena que es null.One of the named parameter arrays contains a string that is null.

El miembro especificado es un inicializador de clase.The specified member is a class initializer.

No se encuentran el campo o la propiedad.The field or property cannot be found.

No se encuentra ningún método que coincida con los argumentos en args.No method can be found that matches the arguments in args.

O bien-or- El objeto Type actual representa un tipo que contiene parámetros de tipo abierto, es decir, ContainsGenericParameters devuelve true.The current Type object represents a type that contains open type parameters, that is, ContainsGenericParameters returns true.

No se puede invocar al miembro especificado en target.The specified member cannot be invoked on target.

Más de un método coincide con los criterios de enlace.More than one method matches the binding criteria.

.NET Compact Framework no admite actualmente este método.The .NET Compact Framework does not currently support this method.

El método representado por name tiene uno o más parámetros de tipo genérico no especificados.The method represented by name has one or more unspecified generic type parameters. Es decir, la propiedad ContainsGenericParameters del método devuelve true.That is, the method's ContainsGenericParameters property returns true.

Ejemplos

En el ejemplo siguiente se usa InvokeMember acceder a los miembros de un tipo.The following example uses InvokeMember to access members of a type.

using namespace System;
using namespace System::Reflection;

// This sample class has a field, constructor, method, and property.
ref class MyType
{
private:
   Int32 myField;

public:
   MyType( interior_ptr<Int32> x )
   {
       *x *= 5;
   }

   virtual String^ ToString() override
   {
      return myField.ToString();
   }

   property Int32 MyProp 
   {
      Int32 get()
      {
         return myField;
      }

      void set( Int32 value )
      {
         if ( value < 1 )
                  throw gcnew ArgumentOutOfRangeException( "value",value,"value must be > 0" );

         myField = value;
      }
   }
};

int main()
{
   Type^ t = MyType::typeid;

   // Create an instance of a type.
   array<Object^>^args = {8};
   Console::WriteLine( "The value of x before the constructor is called is {0}.", args[ 0 ] );
   Object^ obj = t->InvokeMember( nullptr, static_cast<BindingFlags>(BindingFlags::DeclaredOnly | BindingFlags::Public | BindingFlags::NonPublic | BindingFlags::Instance | BindingFlags::CreateInstance), nullptr, nullptr, args );
   Console::WriteLine( "Type: {0}", obj->GetType() );
   Console::WriteLine( "The value of x after the constructor returns is {0}.", args[ 0 ] );

   // Read and write to a field.
   array<Object^>^obj5 = {5};
   t->InvokeMember( "myField", static_cast<BindingFlags>(BindingFlags::DeclaredOnly | BindingFlags::Public | BindingFlags::NonPublic | BindingFlags::Instance | BindingFlags::SetField), nullptr, obj, obj5 );
   Int32 v = safe_cast<Int32>(t->InvokeMember( "myField", static_cast<BindingFlags>(BindingFlags::DeclaredOnly | BindingFlags::Public | BindingFlags::NonPublic | BindingFlags::Instance | BindingFlags::GetField), nullptr, obj, nullptr ));
   Console::WriteLine( "myField: {0}", v );

   // Call a method.
   String^ s = safe_cast<String^>(t->InvokeMember( "ToString", static_cast<BindingFlags>(BindingFlags::DeclaredOnly | BindingFlags::Public | BindingFlags::NonPublic | BindingFlags::Instance | BindingFlags::InvokeMethod), nullptr, obj, nullptr ));
   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. 
      array<Object^>^obj0 = {(int^)0};
      t->InvokeMember( "MyProp", static_cast<BindingFlags>(BindingFlags::DeclaredOnly | BindingFlags::Public | BindingFlags::NonPublic | BindingFlags::Instance | BindingFlags::SetProperty), nullptr, obj, obj0 );
   }
   catch ( TargetInvocationException^ e ) 
   {
      // If the property assignment failed for some unexpected
      // reason, rethrow the TargetInvocationException.
      if ( e->InnerException->GetType() != ArgumentOutOfRangeException::typeid )
            throw;

      Console::WriteLine( "An invalid value was assigned to MyProp." );
   }

   array<Object^>^obj2 = {2};
   t->InvokeMember( "MyProp", static_cast<BindingFlags>(BindingFlags::DeclaredOnly | BindingFlags::Public | BindingFlags::NonPublic | BindingFlags::Instance | BindingFlags::SetProperty), nullptr, obj, obj2 );
   v =  safe_cast<Int32>(t->InvokeMember( "MyProp", static_cast<BindingFlags>(BindingFlags::DeclaredOnly | BindingFlags::Public | BindingFlags::NonPublic | BindingFlags::Instance | BindingFlags::GetProperty), nullptr, obj, nullptr ));
   Console::WriteLine( "MyProp: {0}", v );
}
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);
    }
}
Imports System
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 'New

    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 'MyType

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 'Main
End Class 'MyApp

Comentarios

Nota

No puede usar InvokeMember para invocar un método genérico.You cannot use InvokeMember to invoke a generic method.

La siguiente BindingFlags las marcas de filtro pueden utilizarse para definir los miembros que se va a incluir en la búsqueda:The following BindingFlags filter flags can be used to define which members to include in the search:

  • Especificar BindingFlags.Public para incluir los miembros públicos en la búsqueda.Specify BindingFlags.Public to include public members in the search.

  • Especificar BindingFlags.NonPublic para incluir los miembros no públicos (es decir, los miembros privados y protegidos) en la búsqueda.Specify BindingFlags.NonPublic to include non-public members (that is, private and protected members) in the search.

  • Especificar BindingFlags.FlattenHierarchy para incluir miembros estáticos en la jerarquía.Specify BindingFlags.FlattenHierarchy to include static members up the hierarchy.

La siguiente BindingFlags cualquier marcador modificador que puede utilizarse para cambiar el funcionamiento de la búsqueda:The following BindingFlags modifier flags can be used to change how the search works:

  • BindingFlags.IgnoreCase para omitir la grafía de name.BindingFlags.IgnoreCase to ignore the case of name.

  • BindingFlags.DeclaredOnly para buscar solo los miembros declarados en el Type, no los miembros que simplemente se han heredado.BindingFlags.DeclaredOnly to search only the members declared on the Type, not members that were simply inherited.

La siguiente BindingFlags indicadores de invocación pueden utilizarse para denotar la acción que realizará con el miembro:The following BindingFlags invocation flags can be used to denote what action to take with the member:

  • CreateInstance para invocar un constructor.CreateInstance to invoke a constructor. name se omite.name is ignored. No es válido con otros indicadores de invocación.Not valid with other invocation flags.

  • InvokeMethod para invocar un método, pero no un constructor o un inicializador de tipo.InvokeMethod to invoke a method, but not a constructor or a type initializer. No es válido con SetField o SetProperty.Not valid with SetField or SetProperty. Si InvokeMethod se especifica por sí mismo, BindingFlags.Public, BindingFlags.Instance, y BindingFlags.Static se incluyen automáticamente.If InvokeMethod is specified by itself, BindingFlags.Public, BindingFlags.Instance, and BindingFlags.Static are automatically included.

  • GetField Para obtener el valor de un campo.GetField to get the value of a field. No es válido con SetField.Not valid with SetField.

  • SetField Para establecer el valor de un campo.SetField to set the value of a field. No es válido con GetField.Not valid with GetField.

  • GetProperty Para obtener una propiedad.GetProperty to get a property. No es válido con SetProperty.Not valid with SetProperty.

  • SetProperty Para establecer una propiedad.SetProperty to set a property. No es válido con GetProperty.Not valid with GetProperty.

Vea System.Reflection.BindingFlags para obtener más información.See System.Reflection.BindingFlags for more information.

Un método se invocará si se cumplen las condiciones siguientes:A method will be invoked if both of the following conditions are true:

  • El número de parámetros en la declaración del método es igual al número de argumentos de la args matriz (a menos que los argumentos predeterminados se definen en el miembro y BindingFlags.OptionalParamBinding se especifica).The number of parameters in the method declaration equals the number of arguments in the args array (unless default arguments are defined on the member and BindingFlags.OptionalParamBinding is specified).

  • El tipo de cada argumento se puede convertir el enlazador para el tipo del parámetro.The type of each argument can be converted by the binder to the type of the parameter.

El enlazador encontrará todos los métodos de coincidencia.The binder will find all of the matching methods. Estos métodos se encuentran en función del tipo de enlace solicitado (BindingFlags valores InvokeMethod, GetProperty, y así sucesivamente).These methods are found based upon the type of binding requested (BindingFlags values InvokeMethod, GetProperty, and so on). El conjunto de métodos se filtra por el nombre, número de argumentos y un conjunto de modificadores de búsqueda definidos en el enlazador.The set of methods is filtered by the name, number of arguments, and a set of search modifiers defined in the binder.

Después de selecciona el método, se invoca.After the method is selected, it is invoked. En ese momento se comprueba la accesibilidad.Accessibility is checked at that point. La búsqueda puede controlar qué conjunto de métodos se buscan en función del atributo de accesibilidad asociado al método.The search may control which set of methods are searched based upon the accessibility attribute associated with the method. El Binder.BindToMethod método de la Binder clase es responsable de seleccionar el método que se debe invocar.The Binder.BindToMethod method of the Binder class is responsible for selecting the method to be invoked. El enlazador predeterminado, selecciona a la coincidencia más específica.The default binder selects the most specific match.

Se omiten las restricciones de acceso para el código de plena confianza; es decir, constructores privados, métodos, campos y propiedades pueden se puede obtener acceso y se invoca a través de System.Reflection cada vez que el código es de plena confianza.Access restrictions are ignored for fully trusted code; that is, private constructors, methods, fields, and properties can be accessed and invoked through System.Reflection whenever the code is fully trusted.

Puede usar Type.InvokeMember para establecer un campo en un valor determinado mediante la especificación de BindingFlags.SetField.You can use Type.InvokeMember to set a field to a particular value by specifying BindingFlags.SetField. Por ejemplo, si desea establecer un campo de instancia público llamado F en la clase C y F es un String, puede usar código como:For example, if you want to set a public instance field named F on class C, and F is a String, you can use code such as:

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

Si F es un String[], puede usar código como:If F is a String[], you can use code such as:

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

responsable de inicializar el campo F en esta nueva matriz.which will initialize the field F to this new array. También puede usar Type.InvokeMember para establecer una posición en una matriz proporcionando el índice del valor y, a continuación, en el siguiente valor utilizando código similar al siguiente:You can also use Type.InvokeMember to set a position in an array by supplying the index of the value and then the next value by using code such as the following:

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

Esta operación cambiará la cadena "z" en la matriz que contiene F a la cadena "b".This will change string "z" in the array that F holds to string "b".

Cuando se invoca un IDispatch miembros, puede especificar el identificador DispID en lugar del nombre de miembro, con el formato de cadena "[DispID = ##]".When you invoke an IDispatch member, you can specify the DispID instead of the member name, using the string format "[DispID=##]". Por ejemplo, si el identificador DispID de MyComMethod es 3, puede especificar la cadena "[DispID = 3]" en lugar de "MyComMethod".For example, if the DispID of MyComMethod is 3, you can specify the string "[DispID=3]" instead of "MyComMethod". Invocar a un miembro por DispID es más rápido que buscar el miembro por su nombre.Invoking a member by DispID is faster than looking up the member by name. En escenarios de agregación compleja, el identificador DispID a veces es la única manera de invocar al miembro deseado.In complex aggregation scenarios, the DispID is sometimes the only way to invoke the desired member.

Nota

A partir de la .NET Framework 2.0 Service Pack 1.NET Framework 2.0 Service Pack 1, este método puede utilizarse para tener acceso a miembros no públicos, si el llamador tiene concedidos ReflectionPermission con el ReflectionPermissionFlag.RestrictedMemberAccess marca y si el conjunto de permisos de los miembros no públicos se restringe al llamador conceder el conjunto o un subconjunto en ella.Starting with the .NET Framework 2.0 Service Pack 1.NET Framework 2.0 Service Pack 1, this method can be used to access non-public members if the caller has been granted ReflectionPermission with the ReflectionPermissionFlag.RestrictedMemberAccess flag and if the grant set of the non-public members is restricted to the caller's grant set, or a subset thereof. (Consulte consideraciones de seguridad para la reflexión.)(See Security Considerations for Reflection.)

Para utilizar esta funcionalidad, la aplicación debe utilizar .NET Framework 3,5.NET Framework 3.5 o posterior como destino.To use this functionality, your application should target the .NET Framework 3,5.NET Framework 3.5 or later.

Seguridad

ReflectionPermission
Para obtener acceso a miembros no públicos, independientemente de su concesión establecido.for accessing non-public members regardless of their grant set. Enumeración asociada: MemberAccessAssociated enumeration: MemberAccess

SecurityPermission
para llamar a código no administrado.to call unmanaged code. Enumeración asociada: UnmanagedCodeAssociated enumeration: UnmanagedCode

Consulte también:

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

Invoca al miembro especificado, aplica las restricciones de enlace especificadas y compara la lista de argumentos y la referencia cultural igualmente especificadas.Invokes the specified member, using the specified binding constraints and matching the specified argument list and 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);
public object InvokeMember (string name, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder binder, object target, object[] args, System.Globalization.CultureInfo culture);
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

Parámetros

name
String String String

Cadena que contiene el nombre del constructor, el método, la propiedad o el miembro de campo al que se va a invocar.The string containing the name of the constructor, method, property, or field member to invoke.

O bien-or- Cadena vacía ("") para llamar al miembro predeterminado.An empty string ("") to invoke the default member.

O bien-or- Para los miembros de IDispatch, cadena que representa el identificador DispID, por ejemplo "[DispID=3]".For IDispatch members, a string representing the DispID, for example "[DispID=3]".

invokeAttr
BindingFlags BindingFlags BindingFlags

Combinación bit a bit de los valores de enumeración que especifican cómo se realiza la búsqueda.A bitwise combination of the enumeration values that specify how the search is conducted. El acceso puede corresponder a uno de los marcadores BindingFlags, como Public, NonPublic, Private, InvokeMethod, GetField, etc.The access can be one of the BindingFlags such as Public, NonPublic, Private, InvokeMethod, GetField, and so on. No es necesario especificar el tipo de búsqueda.The type of lookup need not be specified. Si se omite el tipo de búsqueda, se usan BindingFlags.Public | BindingFlags.Instance | BindingFlags.Static.If the type of lookup is omitted, BindingFlags.Public | BindingFlags.Instance | BindingFlags.Static are used.

binder
Binder Binder Binder

Objeto que define un conjunto de propiedades y permite realizar operaciones de enlace, que pueden incluir la selección de un método sobrecargado, la coerción de tipos de argumentos y la invocación de un miembro mediante reflexión.An object that defines a set of properties and enables binding, which can involve selection of an overloaded method, coercion of argument types, and invocation of a member through reflection.

O bien-or- Referencia nula (Nothing en Visual Basic) para usar la propiedad DefaultBinder.A null reference (Nothing in Visual Basic), to use the DefaultBinder. Observe que la definición explícita de un objeto Binder puede resultar necesaria para llamar correctamente a sobrecargas de método con argumentos variables.Note that explicitly defining a Binder object may be required for successfully invoking method overloads with variable arguments.

target
Object Object Object

Objeto donde debe invocarse al miembro especificado.The object on which to invoke the specified member.

args
Object[]

Matriz que contiene los argumentos que se van a pasar al miembro al cual se va a invocar.An array containing the arguments to pass to the member to invoke.

culture
CultureInfo CultureInfo CultureInfo

Objeto que representa la configuración regional de globalización que se va a usar, que puede ser necesaria para las conversiones específicas de la configuración regional, como pasar un tipo numérico String a Double.The object representing the globalization locale to use, which may be necessary for locale-specific conversions, such as converting a numeric String to a Double.

O bien-or- Referencia nula (Nothing en Visual Basic) para usar el CultureInfo del subproceso actual.A null reference (Nothing in Visual Basic) to use the current thread's CultureInfo.

Devoluciones

Objeto que representa el valor devuelto del miembro invocado.An object representing the return value of the invoked member.

Implementaciones

Excepciones

invokeAttr no contiene CreateInstance y name es null.invokeAttr does not contain CreateInstance and name is null.

invokeAttr no es un atributo BindingFlags válido.invokeAttr is not a valid BindingFlags attribute.

O bien-or- invokeAttr no contiene una de las siguientes marcas de enlace: InvokeMethod, CreateInstance, GetField, SetField, GetProperty o SetProperty.invokeAttr does not contain one of the following binding flags: InvokeMethod, CreateInstance, GetField, SetField, GetProperty, or SetProperty.

O bien-or- invokeAttr contiene CreateInstance combinado con InvokeMethod, GetField, SetField, GetProperty o SetProperty.invokeAttr contains CreateInstance combined with InvokeMethod, GetField, SetField, GetProperty, or SetProperty.

O bien-or- invokeAttr contiene tanto GetField como SetField.invokeAttr contains both GetField and SetField.

O bien-or- invokeAttr contiene tanto GetProperty como SetProperty.invokeAttr contains both GetProperty and SetProperty.

O bien-or- invokeAttr contiene InvokeMethod combinado con SetField o SetProperty.invokeAttr contains InvokeMethod combined with SetField or SetProperty.

O bien-or- invokeAttr contiene SetField y args tiene más de un elemento.invokeAttr contains SetField and args has more than one element.

O bien-or- Se llama a este método en un objeto COM pero no se pasa una de las siguientes marcas de enlace: BindingFlags.InvokeMethod, BindingFlags.GetProperty, BindingFlags.SetProperty, BindingFlags.PutDispProperty o BindingFlags.PutRefDispProperty.This method is called on a COM object and one of the following binding flags was not passed in: BindingFlags.InvokeMethod, BindingFlags.GetProperty, BindingFlags.SetProperty, BindingFlags.PutDispProperty, or BindingFlags.PutRefDispProperty.

O bien-or- Una de las matrices de parámetros con nombre contiene una cadena que es null.One of the named parameter arrays contains a string that is null.

El miembro especificado es un inicializador de clase.The specified member is a class initializer.

No se encuentran el campo o la propiedad.The field or property cannot be found.

No se encuentra ningún método que coincida con los argumentos en args.No method can be found that matches the arguments in args.

O bien-or- El objeto Type actual representa un tipo que contiene parámetros de tipo abierto, es decir, ContainsGenericParameters devuelve true.The current Type object represents a type that contains open type parameters, that is, ContainsGenericParameters returns true.

No se puede invocar al miembro especificado en target.The specified member cannot be invoked on target.

Más de un método coincide con los criterios de enlace.More than one method matches the binding criteria.

El método representado por name tiene uno o más parámetros de tipo genérico no especificados.The method represented by name has one or more unspecified generic type parameters. Es decir, la propiedad ContainsGenericParameters del método devuelve true.That is, the method's ContainsGenericParameters property returns true.

Comentarios

Aunque el enlazador predeterminado no procesa CultureInfo (el culture parámetro), puede utilizar la abstracta System.Reflection.Binder clase para escribir un enlazador personalizado que procesan culture.Although the default binder does not process CultureInfo (the culture parameter), you can use the abstract System.Reflection.Binder class to write a custom binder that does process culture.

Nota

No puede usar InvokeMember para invocar un método genérico.You cannot use InvokeMember to invoke a generic method.

La siguiente BindingFlags las marcas de filtro pueden utilizarse para definir los miembros que se va a incluir en la búsqueda:The following BindingFlags filter flags can be used to define which members to include in the search:

  • Especificar BindingFlags.Public para incluir los miembros públicos en la búsqueda.Specify BindingFlags.Public to include public members in the search.

  • Especificar BindingFlags.NonPublic para incluir los miembros no públicos (es decir, miembros privados, internos y protegidos) en la búsqueda.Specify BindingFlags.NonPublic to include non-public members (that is, private, internal, and protected members) in the search.

  • Especificar BindingFlags.FlattenHierarchy para incluir miembros estáticos en la jerarquía.Specify BindingFlags.FlattenHierarchy to include static members up the hierarchy.

La siguiente BindingFlags cualquier marcador modificador que puede utilizarse para cambiar el funcionamiento de la búsqueda:The following BindingFlags modifier flags can be used to change how the search works:

  • BindingFlags.IgnoreCase para omitir la grafía de name.BindingFlags.IgnoreCase to ignore the case of name.

  • BindingFlags.DeclaredOnly para buscar solo los miembros declarados en el Type, no los miembros que simplemente se han heredado.BindingFlags.DeclaredOnly to search only the members declared on the Type, not members that were simply inherited.

La siguiente BindingFlags indicadores de invocación pueden utilizarse para denotar la acción que realizará con el miembro:The following BindingFlags invocation flags can be used to denote what action to take with the member:

  • CreateInstance para invocar un constructor.CreateInstance to invoke a constructor. name se omite.name is ignored. No es válido con otros indicadores de invocación.Not valid with other invocation flags.

  • InvokeMethod para invocar un método, pero no un constructor o un inicializador de tipo.InvokeMethod to invoke a method, but not a constructor or a type initializer. No es válido con SetField o SetProperty.Not valid with SetField or SetProperty. Si InvokeMethod se especifica por sí mismo, BindingFlags.Public, BindingFlags.Instance, y BindingFlags.Static se incluyen automáticamente.If InvokeMethod is specified by itself, BindingFlags.Public, BindingFlags.Instance, and BindingFlags.Static are automatically included.

  • GetField Para obtener el valor de un campo.GetField to get the value of a field. No es válido con SetField.Not valid with SetField.

  • SetField Para establecer el valor de un campo.SetField to set the value of a field. No es válido con GetField.Not valid with GetField.

  • GetProperty Para obtener una propiedad.GetProperty to get a property. No es válido con SetProperty.Not valid with SetProperty.

  • SetProperty Para establecer una propiedad.SetProperty to set a property. No es válido con GetProperty.Not valid with GetProperty.

Vea System.Reflection.BindingFlags para obtener más información.See System.Reflection.BindingFlags for more information.

Un método se invocará si se cumplen las condiciones siguientes:A method will be invoked if both of the following conditions are true:

  • El número de parámetros en la declaración del método es igual al número de argumentos de la args matriz (a menos que los argumentos predeterminados se definen en el miembro y BindingFlags.OptionalParamBinding se especifica).The number of parameters in the method declaration equals the number of arguments in the args array (unless default arguments are defined on the member and BindingFlags.OptionalParamBinding is specified).

  • El tipo de cada argumento se puede convertir el enlazador para el tipo del parámetro.The type of each argument can be converted by the binder to the type of the parameter.

El enlazador encontrará todos los métodos de coincidencia.The binder will find all of the matching methods. Estos métodos se encuentran en función del tipo de enlace solicitado (BindingFlags valores InvokeMethod, GetProperty, y así sucesivamente).These methods are found based upon the type of binding requested (BindingFlags values InvokeMethod, GetProperty, and so on). El conjunto de métodos se filtra por el nombre, número de argumentos y un conjunto de modificadores de búsqueda definidos en el enlazador.The set of methods is filtered by the name, number of arguments, and a set of search modifiers defined in the binder.

Después de selecciona el método, se invoca.After the method is selected, it is invoked. En ese momento se comprueba la accesibilidad.Accessibility is checked at that point. La búsqueda puede controlar qué conjunto de métodos se buscan en función del atributo de accesibilidad asociado al método.The search may control which set of methods are searched based upon the accessibility attribute associated with the method. El Binder.BindToMethod método de la Binder clase es responsable de seleccionar el método que se debe invocar.The Binder.BindToMethod method of the Binder class is responsible for selecting the method to be invoked. El enlazador predeterminado, selecciona a la coincidencia más específica.The default binder selects the most specific match.

Se omiten las restricciones de acceso para el código de plena confianza; es decir, propiedades, métodos, campos y constructores privados pueden tener acceso a y se invocan mediante reflexión siempre que el código es de plena confianza.Access restrictions are ignored for fully trusted code; that is, private constructors, methods, fields, and properties can be accessed and invoked through Reflection whenever the code is fully trusted.

Puede usar Type.InvokeMember para establecer un campo en un valor determinado mediante la especificación de BindingFlags.SetField.You can use Type.InvokeMember to set a field to a particular value by specifying BindingFlags.SetField. Por ejemplo, si desea establecer un campo de instancia público llamado F en la clase C y F es un String puede usar código como:For example, if you want to set a public instance field named F on class C, and F is a String you can use code such as:

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

Si F es un String[], puede usar código como:If F is a String[], you can use code such as:

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

responsable de inicializar el campo F en esta nueva matriz.which will initialize the field F to this new array. También puede usar Type.InvokeMember para establecer una posición en una matriz proporcionando el índice del valor y, a continuación, en el siguiente valor utilizando código similar al siguiente:You can also use Type.InvokeMember to set a position in an array by supplying the index of the value and then the next value by using code such as the following:

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

Esta operación cambiará la cadena "z" en la matriz que contiene F a la cadena "b".This will change string "z" in the array that F holds to string "b".

Cuando se invoca un IDispatch miembro puede especificar el identificador DispID en lugar del nombre de miembro, con el formato de cadena "[DispID = ##]".When you invoke an IDispatch member you can specify the DispID instead of the member name, using the string format "[DispID=##]". Por ejemplo, si el identificador DispID de MyComMethod es 3, puede especificar la cadena "[DispID = 3]" en lugar de "MyComMethod".For example, if the DispID of MyComMethod is 3, you can specify the string "[DispID=3]" instead of "MyComMethod". Invocar a un miembro por DispID es más rápido que buscar el miembro por su nombre.Invoking a member by DispID is faster than looking up the member by name. En escenarios de agregación compleja, el identificador DispID a veces es la única manera de invocar al miembro deseado.In complex aggregation scenarios, the DispID is sometimes the only way to invoke the desired member.

Nota

A partir de la .NET Framework 2.0 Service Pack 1.NET Framework 2.0 Service Pack 1, este método puede utilizarse para tener acceso a miembros no públicos, si el llamador tiene concedidos ReflectionPermission con el ReflectionPermissionFlag.RestrictedMemberAccess marca y si el conjunto de permisos de los miembros no públicos se restringe al llamador conceder el conjunto o un subconjunto en ella.Starting with the .NET Framework 2.0 Service Pack 1.NET Framework 2.0 Service Pack 1, this method can be used to access non-public members if the caller has been granted ReflectionPermission with the ReflectionPermissionFlag.RestrictedMemberAccess flag and if the grant set of the non-public members is restricted to the caller's grant set, or a subset thereof. (Consulte consideraciones de seguridad para la reflexión.)(See Security Considerations for Reflection.)

Para utilizar esta funcionalidad, la aplicación debe utilizar .NET Framework 3,5.NET Framework 3.5 o posterior como destino.To use this functionality, your application should target the .NET Framework 3,5.NET Framework 3.5 or later.

Seguridad

ReflectionPermission
Para obtener acceso a miembros no públicos, independientemente de su concesión establecido.for accessing non-public members regardless of their grant set. Enumeración asociada: MemberAccessAssociated enumeration: MemberAccess

SecurityPermission
para llamar a código no administrado.to call unmanaged code. Enumeración asociada: UnmanagedCodeAssociated enumeration: UnmanagedCode

Consulte también:

Se aplica a