Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Este artigo fornece comentários complementares à documentação de referência para esta API.
As diretrizes a seguir se aplicam a todas as sobrecargas:
- Uma propriedade é considerada pública para reflexão caso tenha pelo menos um acessador público. Caso contrário, a propriedade é considerada privada e você deve usar BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Static (no Visual Basic, combinar os valores usando
Or) para obtê-la. - Se o atual Type representar um tipo genérico construído, este método retorna o PropertyInfo com os parâmetros de tipo substituídos pelos argumentos de tipo apropriados.
- Se a corrente Type representar um parâmetro de tipo na definição de um tipo genérico ou método genérico, esse método pesquisará as propriedades da restrição de classe.
método GetProperty(String)
A pesquisa de name diferencia maiúsculas de minúsculas. A pesquisa inclui propriedades de instância estática pública e pública.
As situações em que AmbiguousMatchException ocorre incluem o seguinte:
- Um tipo contém duas propriedades indexadas que têm o mesmo nome, mas números diferentes de parâmetros. Para resolver a ambiguidade, use uma sobrecarga do método GetProperty que especifica os tipos de parâmetro.
- Um tipo derivado declara uma propriedade que oculta uma propriedade herdada com o mesmo nome, usando o
newmodificador (Shadowsno Visual Basic). Para resolver a ambiguidade, use a sobrecarga do método GetProperty(String, BindingFlags) e adicione o sinalizador BindingFlags.DeclaredOnly para restringir a pesquisa aos membros que não são herdados.
método GetProperty(String, BindingFlags)
Os seguintes BindingFlags sinalizadores de filtro podem ser usados para definir quais propriedades incluir na pesquisa:
- Você deve especificar ou
BindingFlags.InstanceouBindingFlags.Staticpara obter um retorno. - Especifique
BindingFlags.Publicpara incluir propriedades públicas na pesquisa. - Especifique
BindingFlags.NonPublicpara incluir propriedades não públicas (ou seja, propriedades privadas, internas e protegidas) na pesquisa. - Especifique
BindingFlags.FlattenHierarchypara incluirpubliceprotectedmembros estáticos na hierarquia;privatemembros estáticos em classes herdadas não estão incluídos.
Os seguintes sinalizadores de modificador BindingFlags podem ser usados para alterar como a pesquisa funciona:
-
BindingFlags.IgnoreCasepara ignorar o caso dename. -
BindingFlags.DeclaredOnlypara pesquisar apenas as propriedades declaradas no Type, não propriedades que foram simplesmente herdadas.
As situações em que AmbiguousMatchException ocorre incluem o seguinte:
- Um tipo contém duas propriedades indexadas que têm o mesmo nome, mas números diferentes de parâmetros. Para resolver a ambiguidade, use uma sobrecarga do método GetProperty que especifica os tipos de parâmetro.
- Um tipo derivado declara uma propriedade que oculta uma propriedade herdada com o mesmo nome, usando o
newmodificador (Shadowsno Visual Basic). Para resolver a ambiguidade, inclua BindingFlags.DeclaredOnly para restringir a pesquisa a membros que não são herdados.
Método GetProperty(System.String, System.Reflection.BindingFlags, System.Reflection.Binder, System.Type, System.Type[], System.Reflection.ParameterModifier[])
Embora o associador padrão não processe ParameterModifier (o modifiers parâmetro), você pode usar a classe abstrata System.Reflection.Binder para gravar um associador personalizado que processa modifiers.
ParameterModifier é usado apenas durante a chamada por meio da interoperabilidade COM e apenas os parâmetros passados por referência são manipulados.
A tabela a seguir mostra quais membros de uma classe base são retornados pelos métodos Get ao refletir sobre um tipo.
| Tipo de Membro | Estático | Não estático |
|---|---|---|
| Construtor | Não | Não |
| Campo | Não | Sim. Um campo permanece sempre oculto por nome e assinatura. |
| Acontecimento | Não aplicável | A regra de sistema do tipo comum é que a herança é a mesma dos métodos que implementam a propriedade. Reflexão trata propriedades como ocultas por nome e assinatura.2 |
| Método | Não | Sim. Um método (virtual e não virtual) pode permanecer oculto por nome ou por nome e assinatura. |
| Tipo aninhado | Não | Não |
| Propriedade | Não aplicável | A regra de sistema do tipo comum é que a herança é a mesma dos métodos que implementam a propriedade. Reflexão trata propriedades como ocultas por nome e assinatura.2 |
Observações:
- Oculto por nome e assinatura considera todas as partes da assinatura, inclusive modificadores personalizados, tipos de retorno, tipos de parâmetro, sentinelas e convenções de chamada não gerenciadas. Essa é uma comparação binária.
- Para reflexão, propriedades e eventos permanecem ocultos por nome e assinatura. Se você tiver uma propriedade com um acessador get e um set na classe base, mas a classe derivada tiver apenas um acessador get, a propriedade de classe derivada ocultará a propriedade de classe base e você não poderá acessar o setter na classe base.
- Atributos personalizados não fazem parte do sistema de tipos comuns.
Os seguintes BindingFlags sinalizadores de filtro podem ser usados para definir quais propriedades incluir na pesquisa:
- Você deve especificar ou
BindingFlags.InstanceouBindingFlags.Staticpara obter um retorno. - Especifique
BindingFlags.Publicpara incluir propriedades públicas na pesquisa. - Especifique
BindingFlags.NonPublicpara incluir propriedades não públicas (ou seja, propriedades privadas, internas e protegidas) na pesquisa. - Especifique
BindingFlags.FlattenHierarchypara incluirpubliceprotectedmembros estáticos na hierarquia;privatemembros estáticos em classes herdadas não estão incluídos.
Os seguintes sinalizadores de modificador BindingFlags podem ser usados para alterar como a pesquisa funciona:
-
BindingFlags.IgnoreCasepara ignorar o caso dename. -
BindingFlags.DeclaredOnlypara pesquisar apenas as propriedades declaradas no Type, não propriedades que foram simplesmente herdadas.
Indexadores e propriedades padrão
Visual Basic, C#e C++ simplificaram a sintaxe para acessar propriedades indexadas e permitem que uma propriedade indexada seja um padrão para seu tipo. Por exemplo, se a variável myList se referir a um ArrayList, a sintaxe myList[3] (myList(3) no Visual Basic) recuperará o elemento com o índice de 3. É possível sobrecarregar a propriedade.
Em C#, esse recurso é chamado de indexador e não pode ser referenciado pelo nome. Por padrão, um indexador C# aparece em metadados como uma propriedade indexada chamada Item. No entanto, um desenvolvedor de biblioteca de classes pode usar o IndexerNameAttribute atributo para alterar o nome do indexador nos metadados. Por exemplo, a String classe tem um indexador chamado Chars[]. As propriedades indexadas criadas com idiomas diferentes de C# podem ter nomes diferentes de Item.
Para determinar se um tipo tem uma propriedade padrão, use o GetCustomAttributes(Type, Boolean) método para testar o DefaultMemberAttribute atributo. Se o tipo tiver DefaultMemberAttribute, a MemberName propriedade retornará o nome da propriedade padrão.