Type.InvokeMember Type.InvokeMember Type.InvokeMember Method

Definição

Invoca um membro específico do Type atual.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[])

Quando substituído em uma classe derivada, invoca o membro especificado usando as restrições de associação especificadas e correspondendo a cultura, modificadores e lista de argumentos especificados.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 o membro especificado, usando as restrições de associação especificadas e fazendo a correspondência da lista de argumentos especificada.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 o membro especificado, usando as restrições de associação especificadas e fazendo a correspondência da lista de argumentos e cultura 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[])

Quando substituído em uma classe derivada, invoca o membro especificado usando as restrições de associação especificadas e correspondendo a cultura, modificadores e lista de argumentos especificados.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

A cadeia de caracteres que contém o nome do construtor, método, propriedade ou membro de campo a serem invocados.The string containing the name of the constructor, method, property, or field member to invoke.

- ou --or- Uma cadeia de caracteres vazia ("") para invocar o membro padrão.An empty string ("") to invoke the default member.

- ou --or- Para membros IDispatch, uma cadeia de caracteres que representa a DispID, por exemplo "[DispID=3]".For IDispatch members, a string representing the DispID, for example "[DispID=3]".

invokeAttr
BindingFlags BindingFlags BindingFlags

Uma combinação bit a bit dos valores de enumeração que especificam como a pesquisa é realizada.A bitwise combination of the enumeration values that specify how the search is conducted. O acesso pode ser um dos BindingFlags, como Public, NonPublic, Private, InvokeMethod, GetField e assim por diante.The access can be one of the BindingFlags such as Public, NonPublic, Private, InvokeMethod, GetField, and so on. O tipo de pesquisa não precisa ser especificado.The type of lookup need not be specified. Se o tipo de pesquisa for omitido, BindingFlags.Public | BindingFlags.Instance | BindingFlags.Static serão usados.If the type of lookup is omitted, BindingFlags.Public | BindingFlags.Instance | BindingFlags.Static are used.

binder
Binder Binder Binder

Um objeto que define um conjunto de propriedades e habilita a associação, que pode envolver seleção de um método sobrecarregado, coerção de tipos de argumento e invocação de um membro por meio da reflexão.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.

- ou --or- Uma referência nula (Nothing no Visual Basic) para usar o DefaultBinder.A null reference (Nothing in Visual Basic), to use the DefaultBinder. Observe que a definição explícita de um objeto Binder poderá ser necessária para invocar com êxito sobrecargas de método com argumentos de variável.Note that explicitly defining a Binder object may be required for successfully invoking method overloads with variable arguments.

target
Object Object Object

O objeto no qual invocar o membro especificado.The object on which to invoke the specified member.

args
Object[]

Uma matriz que contém os argumentos que serão passados para o membro a ser invocado.An array containing the arguments to pass to the member to invoke.

modifiers
ParameterModifier[]

Uma matriz de objetos ParameterModifier que representam os atributos associados ao elemento correspondente na matriz args.An array of ParameterModifier objects representing the attributes associated with the corresponding element in the args array. Os atributos associados ao parâmetro são armazenados na assinatura do membro.A parameter's associated attributes are stored in the member's signature.

O associador padrão processa este parâmetro somente ao chamar um componente COM.The default binder processes this parameter only when calling a COM component.

culture
CultureInfo CultureInfo CultureInfo

O objeto CultureInfo que representa a localidade de globalização a ser usada, que pode ser necessária para realizar conversões específicas de localidade, como converter uma String numérica em uma 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.

- ou --or- Uma referência nula (Nothing no Visual Basic) para usar o CultureInfo do thread atual.A null reference (Nothing in Visual Basic) to use the current thread's CultureInfo.

namedParameters
String[]

Uma matriz que contém os nomes dos parâmetros para os quais os valores na matriz args são passados.An array containing the names of the parameters to which the values in the args array are passed.

Retornos

Um objeto que representa o valor retornado do membro invocado.An object representing the return value of the invoked member.

Implementações

Exceções

invokeAttr não contém CreateInstance e name é null.invokeAttr does not contain CreateInstance and name is null.

args e modifiers não têm o mesmo tamanho.args and modifiers do not have the same length.

- ou --or- invokeAttr não é um atributo BindingFlags válido.invokeAttr is not a valid BindingFlags attribute.

- ou --or- invokeAttr não contém um dos seguintes sinalizadores de associação: InvokeMethod, CreateInstance, GetField, SetField, GetPropertyou SetProperty.invokeAttr does not contain one of the following binding flags: InvokeMethod, CreateInstance, GetField, SetField, GetProperty, or SetProperty.

- ou --or- invokeAttr contém CreateInstance combinado com InvokeMethod, GetField, SetField, GetPropertyou SetProperty.invokeAttr contains CreateInstance combined with InvokeMethod, GetField, SetField, GetProperty, or SetProperty.

- ou --or- invokeAttr contém GetField e SetField.invokeAttr contains both GetField and SetField.

- ou --or- invokeAttr contém GetProperty e SetProperty.invokeAttr contains both GetProperty and SetProperty.

- ou --or- invokeAttr contém InvokeMethod combinado com SetField ou SetProperty.invokeAttr contains InvokeMethod combined with SetField or SetProperty.

- ou --or- invokeAttr contém SetField e args tem mais de um elemento.invokeAttr contains SetField and args has more than one element.

- ou --or- A matriz de parâmetros nomeados é maior que a matriz de argumentos.The named parameter array is larger than the argument array.

- ou --or- Esse método é chamado em um objeto COM e um dos seguintes sinalizadores de associação não foi passado: BindingFlags.InvokeMethod, BindingFlags.GetProperty, BindingFlags.SetProperty, BindingFlags.PutDispProperty ou 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.

- ou --or- Uma das matrizes de parâmetro nomeadas contém uma cadeia de caracteres que é null.One of the named parameter arrays contains a string that is null.

O membro especificado é um inicializador de classe.The specified member is a class initializer.

Não é possível encontrar o campo nem a propriedade.The field or property cannot be found.

Não é possível encontrar nenhum método que corresponde aos argumentos em args.No method can be found that matches the arguments in args.

- ou --or- Não foi possível encontrar nenhum membro com os nomes de argumentos fornecidos em namedParameters.No member can be found that has the argument names supplied in namedParameters.

- ou --or- O atual objeto Type representa um tipo que contém os parâmetros de tipo aberto, ou seja, ContainsGenericParameters retorna true.The current Type object represents a type that contains open type parameters, that is, ContainsGenericParameters returns true.

O membro especificado não pode ser invocado no target.The specified member cannot be invoked on target.

Mais de um método corresponde aos critérios de associação.More than one method matches the binding criteria.

O método representado pelo name tem um ou mais parâmetros de tipo genérico não especificados.The method represented by name has one or more unspecified generic type parameters. Ou seja, a propriedade ContainsGenericParameters do método retorna true.That is, the method's ContainsGenericParameters property returns true.

Comentários

InvokeMemberchama um membro de construtor ou um membro de método, Obtém ou define um membro de propriedade, Obtém ou define um membro de campo de dados ou Obtém ou define um elemento de um membro da 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.

Observação

Você não pode InvokeMember usar para invocar um método genérico.You cannot use InvokeMember to invoke a generic method.

Ao invocar um IDispatch membro, você pode especificar o DispID em vez do nome do membro, usando o formato de cadeia de caracteres "[DispID = # #]".When you invoke an IDispatch member you can specify the DispID instead of the member name, using the string format "[DispID=##]". Por exemplo, se o DispID de MyComMethod for 3, você poderá especificar a cadeia de caracteres "[DispID = 3]" em vez de "MyComMethod".For example, if the DispID of MyComMethod is 3, you can specify the string "[DispID=3]" instead of "MyComMethod". Invocar um membro por DispID é mais rápido do que procurar o membro por nome.Invoking a member by DispID is faster than looking up the member by name. Em cenários de agregação complexos, às vezes, o DispID é a única maneira de invocar o membro desejado.In complex aggregation scenarios, the DispID is sometimes the only way to invoke the desired member.

Embora o associador padrão não processe ParameterModifier ou CultureInfo (os modifiers parâmetros culture e), você pode usar a classe System.Reflection.Binder abstract para gravar um fichário personalizado que processa modifiers e 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 só é usado durante a chamada por meio da interoperabilidade COM e apenas parâmetros passados por referência são identificados.ParameterModifier is only used when calling through COM interop, and only parameters that are passed by reference are handled.

Cada parâmetro na matriz namedParameters obtém o valor no elemento correspondente na matriz args.Each parameter in the namedParameters array gets the value in the corresponding element in the args array. Se o comprimento de args for maior que o de namedParameters, os valores de argumento restantes serão passados em ordem.If the length of args is greater than the length of namedParameters, the remaining argument values are passed in order.

A namedParameters matriz pode ser usada para alterar a ordem dos argumentos em uma matriz de entrada.The namedParameters array can be used to change the order of arguments in an input array. Por exemplo, considerando o método M(string a, int b) (M(ByVal a As String, ByVal b As Integer) em Visual Basic) e a matriz { 42, "x" }de entrada, a matriz de entrada pode ser passada inalterada para args se { "b", "a" } a matriz for namedParametersfornecida para o.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.

Os seguintes sinalizadores de filtro BindingFlags podem ser usados para definir quais membros devem ser incluídos na pesquisa:The following BindingFlags filter flags can be used to define which members to include in the search:

  • Especifique BindingFlags.Public para incluir membros públicos na pesquisa.Specify BindingFlags.Public to include public members in the search.

  • Especifique BindingFlags.NonPublic para incluir membros não públicos (ou seja, membros particulares, internos e protegidos) na pesquisa.Specify BindingFlags.NonPublic to include non-public members (that is, private, internal, and protected members) in the search.

  • Especifique BindingFlags.FlattenHierarchy para incluir membros estáticos na hierarquia.Specify BindingFlags.FlattenHierarchy to include static members up the hierarchy.

Os seguintes sinalizadores de modificador BindingFlags podem ser usados para alterar como a pesquisa funciona:The following BindingFlags modifier flags can be used to change how the search works:

  • BindingFlags.IgnoreCase para ignorar o caso de name.BindingFlags.IgnoreCase to ignore the case of name.

  • BindingFlags.DeclaredOnly para procurar apenas os membros declarados no Type, e não os membros que foram simplesmente herdados.BindingFlags.DeclaredOnly to search only the members declared on the Type, not members that were simply inherited.

Os seguintes BindingFlags sinalizadores de invocação podem ser usados para denotar a ação a ser tomada com o membro:The following BindingFlags invocation flags can be used to denote what action to take with the member:

  • CreateInstancepara invocar um construtor.CreateInstance to invoke a constructor. nameé ignorado.name is ignored. Não é válido com outros sinalizadores de invocação.Not valid with other invocation flags.

  • InvokeMethodpara invocar um método, mas não um construtor ou um inicializador de tipo.InvokeMethod to invoke a method, but not a constructor or a type initializer. Não é válido SetField com SetPropertyou.Not valid with SetField or SetProperty. Se InvokeMethod é especificado por si só BindingFlags.Public BindingFlags.Instance,, e BindingFlags.Static são incluídos automaticamente.If InvokeMethod is specified by itself, BindingFlags.Public, BindingFlags.Instance, and BindingFlags.Static are automatically included.

  • GetFieldpara obter o valor de um campo.GetField to get the value of a field. Não é válido SetFieldcom.Not valid with SetField.

  • SetFieldpara definir o valor de um campo.SetField to set the value of a field. Não é válido GetFieldcom.Not valid with GetField.

  • GetPropertypara obter uma propriedade.GetProperty to get a property. Não é válido SetPropertycom.Not valid with SetProperty.

  • SetPropertypara definir uma propriedade.SetProperty to set a property. Não é válido GetPropertycom.Not valid with GetProperty.

Consulte System.Reflection.BindingFlags para obter mais informações.See System.Reflection.BindingFlags for more information.

Um método será invocado se ambas as seguintes condições forem verdadeiras:A method will be invoked if both of the following conditions are true:

  • O número de parâmetros na declaração do método é igual ao número de argumentos na args matriz (a menos que argumentos padrão sejam definidos no membro BindingFlags.OptionalParamBinding e seja especificado).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).

  • O tipo de cada argumento pode ser convertido pelo associador para o tipo do parâmetro.The type of each argument can be converted by the binder to the type of the parameter.

O associador encontrará todos os métodos correspondentes.The binder will find all of the matching methods. Esses métodos são encontrados com base no tipo de associação solicitadaBindingFlags ( InvokeMethodvalores GetProperty, e assim por diante).These methods are found based upon the type of binding requested (BindingFlags values InvokeMethod, GetProperty, and so on). O conjunto de métodos é filtrado pelo nome, número de argumentos e um conjunto de modificadores de pesquisa definidos no associador.The set of methods is filtered by the name, number of arguments, and a set of search modifiers defined in the binder.

Depois que o método é selecionado, ele é invocado.After the method is selected, it is invoked. A acessibilidade é verificada nesse ponto.Accessibility is checked at that point. A pesquisa pode controlar qual conjunto de métodos é pesquisado com base no atributo de acessibilidade associado ao método.The search may control which set of methods are searched based upon the accessibility attribute associated with the method. O Binder.BindToMethod métodoBinder da classe é responsável por selecionar o método a ser invocado.The Binder.BindToMethod method of the Binder class is responsible for selecting the method to be invoked. O associador padrão seleciona a correspondência mais específica.The default binder selects the most specific match.

InvokeMemberpode ser usado para invocar métodos com parâmetros que têm valores padrão.InvokeMember can be used to invoke methods with parameters that have default values. Para associar a esses métodos, a reflexão BindingFlags.OptionalParamBinding requer que seja especificada.To bind to these methods, Reflection requires BindingFlags.OptionalParamBinding to be specified. Para um parâmetro que tem um valor padrão, você pode fornecer um valor diferente ou fornecer Missing.Value para usar o valor padrão.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 exemplo, considere um método como Meumetodo (int x, float y = 2,0).For example, consider a method such as MyMethod(int x, float y = 2.0). Para invocar esse método apenas com o primeiro argumento como meumetodo (4), passe um dos sinalizadores de associação acima e passe dois argumentos, ou seja, 4 para o primeiro Missing.Value argumento e para o 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 Missing.Valuevocê use o, você não pode omitir Invoke parâmetros opcionais com o método.Unless you use Missing.Value, you may not omit optional parameters with the Invoke method. Se você precisar fazer isso, use InvokeMember em vez disso.If you must do so, use InvokeMember instead.

As restrições de acesso são ignoradas para código totalmente confiável; ou seja, construtores particulares, métodos, campos e propriedades podem ser acessados e invocados System.Reflection sempre que o código for totalmente confiável.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.

Você pode usar Type.InvokeMember para definir um campo para um valor específico especificando. BindingFlags.SetFieldYou can use Type.InvokeMember to set a field to a particular value by specifying BindingFlags.SetField. Por exemplo, se você quiser definir um campo de instância pública chamado F na classe C e F for um, Stringvocê pode usar um 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);

Se F for um String[], você poderá usar um 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);

que irá inicializar o campo F para essa nova matriz.which will initialize the field F to this new array. Você também pode usar Type.InvokeMember para definir uma posição em uma matriz fornecendo o índice do valor e, em seguida, o próximo valor usando um código como o seguinte: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);

Isso irá alterar a cadeia de caracteres "z" na matriz que F mantém para a cadeia de caracteres "b".This will change string "z" in the array that F holds to string "b".

Observação

A partir do .NET Framework 2.0 Service Pack 1.NET Framework 2.0 Service Pack 1, esse método pode ser usado para acessar membros não públicos se o chamador tiver sido concedido ReflectionPermission com o ReflectionPermissionFlag.RestrictedMemberAccess sinalizador e se o conjunto de concessão dos membros não públicos for restrito ao conjunto de concessão do chamador ou a um subconjunto dele.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 considerações de segurança para reflexão.)(See Security Considerations for Reflection.)

Para usar essa funcionalidade, seu aplicativo deve ser direcionado ao .NET Framework 3,5.NET Framework 3.5 ou posterior.To use this functionality, your application should target the .NET Framework 3,5.NET Framework 3.5 or later.

Segurança

ReflectionPermission
para acessar membros não públicos independentemente do conjunto de concessões.for accessing non-public members regardless of their grant set. Enumeração associada: MemberAccessAssociated enumeration: MemberAccess

SecurityPermission
para chamar código não gerenciado.to call unmanaged code. Enumeração associada: UnmanagedCodeAssociated enumeration: UnmanagedCode

Veja também

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

Invoca o membro especificado, usando as restrições de associação especificadas e fazendo a correspondência da lista de argumentos especificada.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

A cadeia de caracteres que contém o nome do construtor, método, propriedade ou membro de campo a serem invocados.The string containing the name of the constructor, method, property, or field member to invoke.

- ou --or- Uma cadeia de caracteres vazia ("") para invocar o membro padrão.An empty string ("") to invoke the default member.

- ou --or- Para membros IDispatch, uma cadeia de caracteres que representa a DispID, por exemplo "[DispID=3]".For IDispatch members, a string representing the DispID, for example "[DispID=3]".

invokeAttr
BindingFlags BindingFlags BindingFlags

Uma combinação bit a bit dos valores de enumeração que especificam como a pesquisa é realizada.A bitwise combination of the enumeration values that specify how the search is conducted. O acesso pode ser um dos BindingFlags, como Public, NonPublic, Private, InvokeMethod, GetField e assim por diante.The access can be one of the BindingFlags such as Public, NonPublic, Private, InvokeMethod, GetField, and so on. O tipo de pesquisa não precisa ser especificado.The type of lookup need not be specified. Se o tipo de pesquisa for omitido, BindingFlags.Public | BindingFlags.Instance | BindingFlags.Static serão usados.If the type of lookup is omitted, BindingFlags.Public | BindingFlags.Instance | BindingFlags.Static are used.

binder
Binder Binder Binder

Um objeto que define um conjunto de propriedades e habilita a associação, que pode envolver seleção de um método sobrecarregado, coerção de tipos de argumento e invocação de um membro por meio da reflexão.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.

- ou --or- Uma referência nula (Nothing no Visual Basic), para usar o DefaultBinder.A null reference (Nothing in Visual Basic), to use the DefaultBinder. Observe que a definição explícita de um objeto Binder poderá ser necessária para invocar com êxito sobrecargas de método com argumentos de variável.Note that explicitly defining a Binder object may be required for successfully invoking method overloads with variable arguments.

target
Object Object Object

O objeto no qual invocar o membro especificado.The object on which to invoke the specified member.

args
Object[]

Uma matriz que contém os argumentos que serão passados para o membro a ser invocado.An array containing the arguments to pass to the member to invoke.

Retornos

Um objeto que representa o valor retornado do membro invocado.An object representing the return value of the invoked member.

Implementações

Exceções

invokeAttr não contém CreateInstance e name é null.invokeAttr does not contain CreateInstance and name is null.

invokeAttr não é um atributo BindingFlags válido.invokeAttr is not a valid BindingFlags attribute.

- ou --or- invokeAttr não contém um dos seguintes sinalizadores de associação: InvokeMethod, CreateInstance, GetField, SetField, GetPropertyou SetProperty.invokeAttr does not contain one of the following binding flags: InvokeMethod, CreateInstance, GetField, SetField, GetProperty, or SetProperty.

- ou --or- invokeAttr contém CreateInstance combinado com InvokeMethod, GetField, SetField, GetPropertyou SetProperty.invokeAttr contains CreateInstance combined with InvokeMethod, GetField, SetField, GetProperty, or SetProperty.

- ou --or- invokeAttr contém GetField e SetField.invokeAttr contains both GetField and SetField.

- ou --or- invokeAttr contém GetProperty e SetProperty.invokeAttr contains both GetProperty and SetProperty.

- ou --or- invokeAttr contém InvokeMethod combinado com SetField ou SetProperty.invokeAttr contains InvokeMethod combined with SetField or SetProperty.

- ou --or- invokeAttr contém SetField e args tem mais de um elemento.invokeAttr contains SetField and args has more than one element.

- ou --or- Esse método é chamado em um objeto COM e um dos seguintes sinalizadores de associação não foi passado: BindingFlags.InvokeMethod, BindingFlags.GetProperty, BindingFlags.SetProperty, BindingFlags.PutDispProperty ou 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.

- ou --or- Uma das matrizes de parâmetro nomeadas contém uma cadeia de caracteres que é null.One of the named parameter arrays contains a string that is null.

O membro especificado é um inicializador de classe.The specified member is a class initializer.

Não é possível encontrar o campo nem a propriedade.The field or property cannot be found.

Não é possível encontrar nenhum método que corresponde aos argumentos em args.No method can be found that matches the arguments in args.

- ou --or- O atual objeto Type representa um tipo que contém os parâmetros de tipo aberto, ou seja, ContainsGenericParameters retorna true.The current Type object represents a type that contains open type parameters, that is, ContainsGenericParameters returns true.

O membro especificado não pode ser invocado no target.The specified member cannot be invoked on target.

Mais de um método corresponde aos critérios de associação.More than one method matches the binding criteria.

No momento, o .NET Compact Framework não dá suporte a esse método.The .NET Compact Framework does not currently support this method.

O método representado pelo name tem um ou mais parâmetros de tipo genérico não especificados.The method represented by name has one or more unspecified generic type parameters. Ou seja, a propriedade ContainsGenericParameters do método retorna true.That is, the method's ContainsGenericParameters property returns true.

Exemplos

O exemplo a seguir InvokeMember usa para acessar membros de um 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.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 '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
End Class 'MyApp

Comentários

Observação

Você não pode InvokeMember usar para invocar um método genérico.You cannot use InvokeMember to invoke a generic method.

Os seguintes sinalizadores de filtro BindingFlags podem ser usados para definir quais membros devem ser incluídos na pesquisa:The following BindingFlags filter flags can be used to define which members to include in the search:

  • Especifique BindingFlags.Public para incluir membros públicos na pesquisa.Specify BindingFlags.Public to include public members in the search.

  • Especifique BindingFlags.NonPublic para incluir membros não públicos (ou seja, membros privados e protegidos) na pesquisa.Specify BindingFlags.NonPublic to include non-public members (that is, private and protected members) in the search.

  • Especifique BindingFlags.FlattenHierarchy para incluir membros estáticos na hierarquia.Specify BindingFlags.FlattenHierarchy to include static members up the hierarchy.

Os seguintes sinalizadores de modificador BindingFlags podem ser usados para alterar como a pesquisa funciona:The following BindingFlags modifier flags can be used to change how the search works:

  • BindingFlags.IgnoreCase para ignorar o caso de name.BindingFlags.IgnoreCase to ignore the case of name.

  • BindingFlags.DeclaredOnly para procurar apenas os membros declarados no Type, e não os membros que foram simplesmente herdados.BindingFlags.DeclaredOnly to search only the members declared on the Type, not members that were simply inherited.

Os seguintes BindingFlags sinalizadores de invocação podem ser usados para denotar a ação a ser tomada com o membro:The following BindingFlags invocation flags can be used to denote what action to take with the member:

  • CreateInstancepara invocar um construtor.CreateInstance to invoke a constructor. nameé ignorado.name is ignored. Não é válido com outros sinalizadores de invocação.Not valid with other invocation flags.

  • InvokeMethodpara invocar um método, mas não um construtor ou um inicializador de tipo.InvokeMethod to invoke a method, but not a constructor or a type initializer. Não é válido SetField com SetPropertyou.Not valid with SetField or SetProperty. Se InvokeMethod é especificado por si só BindingFlags.Public BindingFlags.Instance,, e BindingFlags.Static são incluídos automaticamente.If InvokeMethod is specified by itself, BindingFlags.Public, BindingFlags.Instance, and BindingFlags.Static are automatically included.

  • GetFieldpara obter o valor de um campo.GetField to get the value of a field. Não é válido SetFieldcom.Not valid with SetField.

  • SetFieldpara definir o valor de um campo.SetField to set the value of a field. Não é válido GetFieldcom.Not valid with GetField.

  • GetPropertypara obter uma propriedade.GetProperty to get a property. Não é válido SetPropertycom.Not valid with SetProperty.

  • SetPropertypara definir uma propriedade.SetProperty to set a property. Não é válido GetPropertycom.Not valid with GetProperty.

Consulte System.Reflection.BindingFlags para obter mais informações.See System.Reflection.BindingFlags for more information.

Um método será invocado se ambas as seguintes condições forem verdadeiras:A method will be invoked if both of the following conditions are true:

  • O número de parâmetros na declaração do método é igual ao número de argumentos na args matriz (a menos que argumentos padrão sejam definidos no membro BindingFlags.OptionalParamBinding e seja especificado).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).

  • O tipo de cada argumento pode ser convertido pelo associador para o tipo do parâmetro.The type of each argument can be converted by the binder to the type of the parameter.

O associador encontrará todos os métodos correspondentes.The binder will find all of the matching methods. Esses métodos são encontrados com base no tipo de associação solicitadaBindingFlags ( InvokeMethodvalores GetProperty, e assim por diante).These methods are found based upon the type of binding requested (BindingFlags values InvokeMethod, GetProperty, and so on). O conjunto de métodos é filtrado pelo nome, número de argumentos e um conjunto de modificadores de pesquisa definidos no associador.The set of methods is filtered by the name, number of arguments, and a set of search modifiers defined in the binder.

Depois que o método é selecionado, ele é invocado.After the method is selected, it is invoked. A acessibilidade é verificada nesse ponto.Accessibility is checked at that point. A pesquisa pode controlar qual conjunto de métodos é pesquisado com base no atributo de acessibilidade associado ao método.The search may control which set of methods are searched based upon the accessibility attribute associated with the method. O Binder.BindToMethod métodoBinder da classe é responsável por selecionar o método a ser invocado.The Binder.BindToMethod method of the Binder class is responsible for selecting the method to be invoked. O associador padrão seleciona a correspondência mais específica.The default binder selects the most specific match.

As restrições de acesso são ignoradas para código totalmente confiável; ou seja, construtores particulares, métodos, campos e propriedades podem ser acessados e invocados System.Reflection sempre que o código for totalmente confiável.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.

Você pode usar Type.InvokeMember para definir um campo para um valor específico especificando. BindingFlags.SetFieldYou can use Type.InvokeMember to set a field to a particular value by specifying BindingFlags.SetField. Por exemplo, se você quiser definir um campo de instância pública chamado F na classe C e F for um, Stringvocê pode usar um 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"});

Se F for um String[], você poderá usar um 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"}});

que irá inicializar o campo F para essa nova matriz.which will initialize the field F to this new array. Você também pode usar Type.InvokeMember para definir uma posição em uma matriz fornecendo o índice do valor e, em seguida, o próximo valor usando um código como o seguinte: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"});

Isso irá alterar a cadeia de caracteres "z" na matriz que F mantém para a cadeia de caracteres "b".This will change string "z" in the array that F holds to string "b".

Ao invocar um IDispatch membro, você pode especificar o DispID em vez do nome do membro, usando o formato de cadeia de caracteres "[DispID = # #]".When you invoke an IDispatch member, you can specify the DispID instead of the member name, using the string format "[DispID=##]". Por exemplo, se o DispID de MyComMethod for 3, você poderá especificar a cadeia de caracteres "[DispID = 3]" em vez de "MyComMethod".For example, if the DispID of MyComMethod is 3, you can specify the string "[DispID=3]" instead of "MyComMethod". Invocar um membro por DispID é mais rápido do que procurar o membro por nome.Invoking a member by DispID is faster than looking up the member by name. Em cenários de agregação complexos, às vezes, o DispID é a única maneira de invocar o membro desejado.In complex aggregation scenarios, the DispID is sometimes the only way to invoke the desired member.

Observação

A partir do .NET Framework 2.0 Service Pack 1.NET Framework 2.0 Service Pack 1, esse método pode ser usado para acessar membros não públicos se o chamador tiver sido concedido ReflectionPermission com o ReflectionPermissionFlag.RestrictedMemberAccess sinalizador e se o conjunto de concessão dos membros não públicos for restrito ao conjunto de concessão do chamador ou a um subconjunto dele.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 considerações de segurança para reflexão.)(See Security Considerations for Reflection.)

Para usar essa funcionalidade, seu aplicativo deve ser direcionado ao .NET Framework 3,5.NET Framework 3.5 ou posterior.To use this functionality, your application should target the .NET Framework 3,5.NET Framework 3.5 or later.

Segurança

ReflectionPermission
para acessar membros não públicos independentemente do conjunto de concessões.for accessing non-public members regardless of their grant set. Enumeração associada: MemberAccessAssociated enumeration: MemberAccess

SecurityPermission
para chamar código não gerenciado.to call unmanaged code. Enumeração associada: UnmanagedCodeAssociated enumeration: UnmanagedCode

Veja também

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

Invoca o membro especificado, usando as restrições de associação especificadas e fazendo a correspondência da lista de argumentos e cultura 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

A cadeia de caracteres que contém o nome do construtor, método, propriedade ou membro de campo a serem invocados.The string containing the name of the constructor, method, property, or field member to invoke.

- ou --or- Uma cadeia de caracteres vazia ("") para invocar o membro padrão.An empty string ("") to invoke the default member.

- ou --or- Para membros IDispatch, uma cadeia de caracteres que representa a DispID, por exemplo "[DispID=3]".For IDispatch members, a string representing the DispID, for example "[DispID=3]".

invokeAttr
BindingFlags BindingFlags BindingFlags

Uma combinação bit a bit dos valores de enumeração que especificam como a pesquisa é realizada.A bitwise combination of the enumeration values that specify how the search is conducted. O acesso pode ser um dos BindingFlags, como Public, NonPublic, Private, InvokeMethod, GetField e assim por diante.The access can be one of the BindingFlags such as Public, NonPublic, Private, InvokeMethod, GetField, and so on. O tipo de pesquisa não precisa ser especificado.The type of lookup need not be specified. Se o tipo de pesquisa for omitido, BindingFlags.Public | BindingFlags.Instance | BindingFlags.Static serão usados.If the type of lookup is omitted, BindingFlags.Public | BindingFlags.Instance | BindingFlags.Static are used.

binder
Binder Binder Binder

Um objeto que define um conjunto de propriedades e habilita a associação, que pode envolver seleção de um método sobrecarregado, coerção de tipos de argumento e invocação de um membro por meio da reflexão.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.

- ou --or- Uma referência nula (Nothing no Visual Basic), para usar o DefaultBinder.A null reference (Nothing in Visual Basic), to use the DefaultBinder. Observe que a definição explícita de um objeto Binder poderá ser necessária para invocar com êxito sobrecargas de método com argumentos de variável.Note that explicitly defining a Binder object may be required for successfully invoking method overloads with variable arguments.

target
Object Object Object

O objeto no qual invocar o membro especificado.The object on which to invoke the specified member.

args
Object[]

Uma matriz que contém os argumentos que serão passados para o membro a ser invocado.An array containing the arguments to pass to the member to invoke.

culture
CultureInfo CultureInfo CultureInfo

O objeto que representa a localidade de globalização a ser usada, que pode ser necessária para realizar conversões específicas de localidade, como converter uma String numérica em uma 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.

- ou --or- Uma referência nula (Nothing no Visual Basic) para usar o CultureInfo do thread atual.A null reference (Nothing in Visual Basic) to use the current thread's CultureInfo.

Retornos

Um objeto que representa o valor retornado do membro invocado.An object representing the return value of the invoked member.

Implementações

Exceções

invokeAttr não contém CreateInstance e name é null.invokeAttr does not contain CreateInstance and name is null.

invokeAttr não é um atributo BindingFlags válido.invokeAttr is not a valid BindingFlags attribute.

- ou --or- invokeAttr não contém um dos seguintes sinalizadores de associação: InvokeMethod, CreateInstance, GetField, SetField, GetPropertyou SetProperty.invokeAttr does not contain one of the following binding flags: InvokeMethod, CreateInstance, GetField, SetField, GetProperty, or SetProperty.

- ou --or- invokeAttr contém CreateInstance combinado com InvokeMethod, GetField, SetField, GetPropertyou SetProperty.invokeAttr contains CreateInstance combined with InvokeMethod, GetField, SetField, GetProperty, or SetProperty.

- ou --or- invokeAttr contém GetField e SetField.invokeAttr contains both GetField and SetField.

- ou --or- invokeAttr contém GetProperty e SetProperty.invokeAttr contains both GetProperty and SetProperty.

- ou --or- invokeAttr contém InvokeMethod combinado com SetField ou SetProperty.invokeAttr contains InvokeMethod combined with SetField or SetProperty.

- ou --or- invokeAttr contém SetField e args tem mais de um elemento.invokeAttr contains SetField and args has more than one element.

- ou --or- Esse método é chamado em um objeto COM e um dos seguintes sinalizadores de associação não foi passado: BindingFlags.InvokeMethod, BindingFlags.GetProperty, BindingFlags.SetProperty, BindingFlags.PutDispProperty ou 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.

- ou --or- Uma das matrizes de parâmetro nomeadas contém uma cadeia de caracteres que é null.One of the named parameter arrays contains a string that is null.

O membro especificado é um inicializador de classe.The specified member is a class initializer.

Não é possível encontrar o campo nem a propriedade.The field or property cannot be found.

Não é possível encontrar nenhum método que corresponde aos argumentos em args.No method can be found that matches the arguments in args.

- ou --or- O atual objeto Type representa um tipo que contém os parâmetros de tipo aberto, ou seja, ContainsGenericParameters retorna true.The current Type object represents a type that contains open type parameters, that is, ContainsGenericParameters returns true.

O membro especificado não pode ser invocado no target.The specified member cannot be invoked on target.

Mais de um método corresponde aos critérios de associação.More than one method matches the binding criteria.

O método representado pelo name tem um ou mais parâmetros de tipo genérico não especificados.The method represented by name has one or more unspecified generic type parameters. Ou seja, a propriedade ContainsGenericParameters do método retorna true.That is, the method's ContainsGenericParameters property returns true.

Comentários

Embora o associador padrão não processe CultureInfo (o parâmetro culture ), é possível usar a classe abstrata System.Reflection.Binder para gravar um associador personalizado que processa 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.

Observação

Você não pode InvokeMember usar para invocar um método genérico.You cannot use InvokeMember to invoke a generic method.

Os seguintes sinalizadores de filtro BindingFlags podem ser usados para definir quais membros devem ser incluídos na pesquisa:The following BindingFlags filter flags can be used to define which members to include in the search:

  • Especifique BindingFlags.Public para incluir membros públicos na pesquisa.Specify BindingFlags.Public to include public members in the search.

  • Especifique BindingFlags.NonPublic para incluir membros não públicos (ou seja, membros particulares, internos e protegidos) na pesquisa.Specify BindingFlags.NonPublic to include non-public members (that is, private, internal, and protected members) in the search.

  • Especifique BindingFlags.FlattenHierarchy para incluir membros estáticos na hierarquia.Specify BindingFlags.FlattenHierarchy to include static members up the hierarchy.

Os seguintes sinalizadores de modificador BindingFlags podem ser usados para alterar como a pesquisa funciona:The following BindingFlags modifier flags can be used to change how the search works:

  • BindingFlags.IgnoreCase para ignorar o caso de name.BindingFlags.IgnoreCase to ignore the case of name.

  • BindingFlags.DeclaredOnly para procurar apenas os membros declarados no Type, e não os membros que foram simplesmente herdados.BindingFlags.DeclaredOnly to search only the members declared on the Type, not members that were simply inherited.

Os seguintes BindingFlags sinalizadores de invocação podem ser usados para denotar a ação a ser tomada com o membro:The following BindingFlags invocation flags can be used to denote what action to take with the member:

  • CreateInstancepara invocar um construtor.CreateInstance to invoke a constructor. nameé ignorado.name is ignored. Não é válido com outros sinalizadores de invocação.Not valid with other invocation flags.

  • InvokeMethodpara invocar um método, mas não um construtor ou um inicializador de tipo.InvokeMethod to invoke a method, but not a constructor or a type initializer. Não é válido SetField com SetPropertyou.Not valid with SetField or SetProperty. Se InvokeMethod é especificado por si só BindingFlags.Public BindingFlags.Instance,, e BindingFlags.Static são incluídos automaticamente.If InvokeMethod is specified by itself, BindingFlags.Public, BindingFlags.Instance, and BindingFlags.Static are automatically included.

  • GetFieldpara obter o valor de um campo.GetField to get the value of a field. Não é válido SetFieldcom.Not valid with SetField.

  • SetFieldpara definir o valor de um campo.SetField to set the value of a field. Não é válido GetFieldcom.Not valid with GetField.

  • GetPropertypara obter uma propriedade.GetProperty to get a property. Não é válido SetPropertycom.Not valid with SetProperty.

  • SetPropertypara definir uma propriedade.SetProperty to set a property. Não é válido GetPropertycom.Not valid with GetProperty.

Consulte System.Reflection.BindingFlags para obter mais informações.See System.Reflection.BindingFlags for more information.

Um método será invocado se ambas as seguintes condições forem verdadeiras:A method will be invoked if both of the following conditions are true:

  • O número de parâmetros na declaração do método é igual ao número de argumentos na args matriz (a menos que argumentos padrão sejam definidos no membro BindingFlags.OptionalParamBinding e seja especificado).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).

  • O tipo de cada argumento pode ser convertido pelo associador para o tipo do parâmetro.The type of each argument can be converted by the binder to the type of the parameter.

O associador encontrará todos os métodos correspondentes.The binder will find all of the matching methods. Esses métodos são encontrados com base no tipo de associação solicitadaBindingFlags ( InvokeMethodvalores GetProperty, e assim por diante).These methods are found based upon the type of binding requested (BindingFlags values InvokeMethod, GetProperty, and so on). O conjunto de métodos é filtrado pelo nome, número de argumentos e um conjunto de modificadores de pesquisa definidos no associador.The set of methods is filtered by the name, number of arguments, and a set of search modifiers defined in the binder.

Depois que o método é selecionado, ele é invocado.After the method is selected, it is invoked. A acessibilidade é verificada nesse ponto.Accessibility is checked at that point. A pesquisa pode controlar qual conjunto de métodos é pesquisado com base no atributo de acessibilidade associado ao método.The search may control which set of methods are searched based upon the accessibility attribute associated with the method. O Binder.BindToMethod métodoBinder da classe é responsável por selecionar o método a ser invocado.The Binder.BindToMethod method of the Binder class is responsible for selecting the method to be invoked. O associador padrão seleciona a correspondência mais específica.The default binder selects the most specific match.

As restrições de acesso são ignoradas para código totalmente confiável; ou seja, construtores particulares, métodos, campos e propriedades podem ser acessados e invocados por meio de reflexão sempre que o código é totalmente confiável.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.

Você pode usar Type.InvokeMember para definir um campo para um valor específico especificando. BindingFlags.SetFieldYou can use Type.InvokeMember to set a field to a particular value by specifying BindingFlags.SetField. Por exemplo, se você quiser definir um campo de instância pública chamado F na classe C, e F for um String , você pode usar um 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);

Se F for um String[], você poderá usar um 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);

que irá inicializar o campo F para essa nova matriz.which will initialize the field F to this new array. Você também pode usar Type.InvokeMember para definir uma posição em uma matriz fornecendo o índice do valor e, em seguida, o próximo valor usando um código como o seguinte: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);

Isso irá alterar a cadeia de caracteres "z" na matriz que F mantém para a cadeia de caracteres "b".This will change string "z" in the array that F holds to string "b".

Ao invocar um IDispatch membro, você pode especificar o DispID em vez do nome do membro, usando o formato de cadeia de caracteres "[DispID = # #]".When you invoke an IDispatch member you can specify the DispID instead of the member name, using the string format "[DispID=##]". Por exemplo, se o DispID de MyComMethod for 3, você poderá especificar a cadeia de caracteres "[DispID = 3]" em vez de "MyComMethod".For example, if the DispID of MyComMethod is 3, you can specify the string "[DispID=3]" instead of "MyComMethod". Invocar um membro por DispID é mais rápido do que procurar o membro por nome.Invoking a member by DispID is faster than looking up the member by name. Em cenários de agregação complexos, às vezes, o DispID é a única maneira de invocar o membro desejado.In complex aggregation scenarios, the DispID is sometimes the only way to invoke the desired member.

Observação

A partir do .NET Framework 2.0 Service Pack 1.NET Framework 2.0 Service Pack 1, esse método pode ser usado para acessar membros não públicos se o chamador tiver sido concedido ReflectionPermission com o ReflectionPermissionFlag.RestrictedMemberAccess sinalizador e se o conjunto de concessão dos membros não públicos for restrito ao conjunto de concessão do chamador ou a um subconjunto dele.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 considerações de segurança para reflexão.)(See Security Considerations for Reflection.)

Para usar essa funcionalidade, seu aplicativo deve ser direcionado ao .NET Framework 3,5.NET Framework 3.5 ou posterior.To use this functionality, your application should target the .NET Framework 3,5.NET Framework 3.5 or later.

Segurança

ReflectionPermission
para acessar membros não públicos independentemente do conjunto de concessões.for accessing non-public members regardless of their grant set. Enumeração associada: MemberAccessAssociated enumeration: MemberAccess

SecurityPermission
para chamar código não gerenciado.to call unmanaged code. Enumeração associada: UnmanagedCodeAssociated enumeration: UnmanagedCode

Veja também

Aplica-se a