Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Observação
Este artigo fornece observações complementares à documentação de referência para esta API.
As orientações a seguir se aplicam a todas as sobrecargas:
- Um imóvel é considerado público para reflexão se tiver pelo menos um acessor que seja 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 current Type representa um tipo genérico construído, esse método retorna o PropertyInfo com os parâmetros type substituídos pelos argumentos de tipo apropriados.
- Se o current Type representa um parâmetro type na definição de um tipo genérico ou método genérico, esse método pesquisa as propriedades da restrição de classe.
GetProperty(String) método
A pesquisa diferencia name maiúsculas de minúsculas. A pesquisa inclui propriedades estáticas públicas e de instância pública.
As situações em que AmbiguousMatchException ocorrem 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 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 a membros que não são herdados.
GetProperty(String, BindingFlags) método
Os seguintes BindingFlags sinalizadores de filtro podem ser usados para definir quais propriedades devem ser incluídas 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 são incluídos.
Os seguintes BindingFlags sinalizadores modificadores podem ser usados para alterar o funcionamento da pesquisa:
-
BindingFlags.IgnoreCaseignorar o caso dename. -
BindingFlags.DeclaredOnlypara pesquisar apenas as propriedades declaradas no Type, e não nas propriedades simplesmente herdadas.
As situações em que AmbiguousMatchException ocorrem 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 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 eliminar a ambiguidade, inclua BindingFlags.DeclaredOnly para restringir a pesquisa a membros que não foram herdados.
Método GetProperty(System.String, System.Reflection.BindingFlags, System.Reflection.Binder, System.Type, System.Type[], System.Reflection.ParameterModifier[])
Embora o fichário padrão não processe ParameterModifier (o modifiers parâmetro), você pode usar a classe abstrata System.Reflection.Binder para escrever um fichário personalizado que processa modifiers.
ParameterModifier é utilizado apenas ao fazer chamadas através da interoperabilidade COM, e apenas os parâmetros que são passados por referência são tratados.
A tabela a seguir mostra quais membros de uma classe base são retornados pelos Get métodos 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 é sempre ocultado com base no nome e assinatura. |
| Evento | Não aplicável | A regra comum do sistema de tipos é que a herança é a mesma dos métodos que implementam a propriedade. A reflexão trata as propriedades como ocultação por nome e assinatura. 2º |
| Método | Não | Sim. Um método (virtual e não virtual) pode ser ocultado por nome ou ocultado por nome e assinatura. |
| Tipo aninhado | Não | Não |
| Propriedade | Não aplicável | A regra comum do sistema de tipos é que a herança é a mesma dos métodos que implementam a propriedade. A reflexão trata as propriedades como ocultação por nome e assinatura. 2º |
Observações:
- Ocultar por nome e assinatura considera todas as partes da assinatura, incluindo modificadores personalizados, tipos de retorno, tipos de parâmetros, sentinelas e convenções de chamada não gerenciadas. Esta é uma comparação binária.
- Para reflexão, as propriedades e os eventos são ocultados 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 acessor get, a propriedade de classe derivada ocultará a propriedade de classe base e você não poderá acessar o setter na classe base.
- Os atributos personalizados não fazem parte do sistema de tipo comum.
Os seguintes BindingFlags sinalizadores de filtro podem ser usados para definir quais propriedades devem ser incluídas 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 são incluídos.
Os seguintes BindingFlags sinalizadores modificadores podem ser usados para alterar o funcionamento da pesquisa:
-
BindingFlags.IgnoreCaseignorar o caso dename. -
BindingFlags.DeclaredOnlypara pesquisar apenas as propriedades declaradas no Type, e não nas propriedades 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 padrão para seu tipo. Por exemplo, se a variável myList se refere a um ArrayList, a sintaxe myList[3] (myList(3) no Visual Basic) recupera o elemento com o índice de 3. Você pode sobrecarregar a propriedade.
Em C#, esse recurso é chamado de indexador e não pode ser referido pelo nome. Por padrão, um indexador C# aparece nos 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 usando linguagens diferentes de C# também 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.