Type.GetProperty Método
Definição
Importante
Algumas informações se referem a produtos de pré-lançamento que podem ser substancialmente modificados antes do lançamento. A Microsoft não oferece garantias, expressas ou implícitas, das informações aqui fornecidas.
Obtém uma propriedade específica do atual Type.
Sobrecargas
| Nome | Description |
|---|---|
| GetProperty(String, Type, Type[]) |
Pesquisa a propriedade pública especificada cujos parâmetros correspondem aos tipos de argumento especificados. |
| GetProperty(String, BindingFlags, Binder, Type, Type[], ParameterModifier[]) |
Pesquisa a propriedade especificada cujos parâmetros correspondem aos tipos de argumento e modificadores especificados, usando as restrições de associação especificadas. |
| GetProperty(String, Type, Type[], ParameterModifier[]) |
Pesquisa a propriedade pública especificada cujos parâmetros correspondem aos tipos de argumento e modificadores especificados. |
| GetProperty(String, Type[]) |
Pesquisa a propriedade pública especificada cujos parâmetros correspondem aos tipos de argumento especificados. |
| GetProperty(String, Type) |
Pesquisa a propriedade pública com o nome e o tipo de retorno especificados. |
| GetProperty(String, BindingFlags) |
Pesquisa a propriedade especificada usando as restrições de associação especificadas. |
| GetProperty(String) |
Pesquisa a propriedade pública com o nome especificado. |
GetProperty(String, Type, Type[])
- Origem:
- Type.cs
- Origem:
- Type.cs
- Origem:
- Type.cs
- Origem:
- Type.cs
- Origem:
- Type.cs
Pesquisa a propriedade pública especificada cujos parâmetros correspondem aos tipos de argumento especificados.
public:
System::Reflection::PropertyInfo ^ GetProperty(System::String ^ name, Type ^ returnType, cli::array <Type ^> ^ types);
public:
virtual System::Reflection::PropertyInfo ^ GetProperty(System::String ^ name, Type ^ returnType, cli::array <Type ^> ^ types);
[System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicProperties)]
public System.Reflection.PropertyInfo? GetProperty(string name, Type? returnType, Type[] types);
public System.Reflection.PropertyInfo GetProperty(string name, Type returnType, Type[] types);
public System.Reflection.PropertyInfo? GetProperty(string name, Type? returnType, Type[] types);
[<System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicProperties)>]
member this.GetProperty : string * Type * Type[] -> System.Reflection.PropertyInfo
member this.GetProperty : string * Type * Type[] -> System.Reflection.PropertyInfo
abstract member GetProperty : string * Type * Type[] -> System.Reflection.PropertyInfo
override this.GetProperty : string * Type * Type[] -> System.Reflection.PropertyInfo
Public Function GetProperty (name As String, returnType As Type, types As Type()) As PropertyInfo
Parâmetros
- name
- String
A cadeia de caracteres que contém o nome da propriedade pública a ser obtido.
- returnType
- Type
O tipo de retorno da propriedade.
- types
- Type[]
Uma matriz de Type objetos que representa o número, a ordem e o tipo dos parâmetros para obter a propriedade indexada.
- ou -
Uma matriz vazia do tipo Type (ou seja, Tipos[] = novo Tipo[0]) para obter uma propriedade que não é indexada.
Retornos
Um objeto que representa a propriedade pública cujos parâmetros correspondem aos tipos de argumento especificados, se encontrado; caso contrário, null.
Implementações
- Atributos
Exceções
Mais de uma propriedade é encontrada com o nome especificado e correspondendo aos tipos de argumento especificados.
types é multidimensional.
Um elemento de types é null.
Comentários
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.
A pesquisa de name diferencia maiúsculas de minúsculas. A pesquisa inclui propriedades de instância estática pública e pública.
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.
Confira também
- PropertyInfo
- String
- DefaultBinder
- GetPropertyImpl(String, BindingFlags, Binder, Type, Type[], ParameterModifier[])
- GetProperties(BindingFlags)
Aplica-se a
GetProperty(String, BindingFlags, Binder, Type, Type[], ParameterModifier[])
- Origem:
- Type.cs
- Origem:
- Type.cs
- Origem:
- Type.cs
- Origem:
- Type.cs
- Origem:
- Type.cs
Pesquisa a propriedade especificada cujos parâmetros correspondem aos tipos de argumento e modificadores especificados, usando as restrições de associação especificadas.
public:
virtual System::Reflection::PropertyInfo ^ GetProperty(System::String ^ name, System::Reflection::BindingFlags bindingAttr, System::Reflection::Binder ^ binder, Type ^ returnType, cli::array <Type ^> ^ types, cli::array <System::Reflection::ParameterModifier> ^ modifiers);
[System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicProperties | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicProperties)]
public System.Reflection.PropertyInfo? GetProperty(string name, System.Reflection.BindingFlags bindingAttr, System.Reflection.Binder? binder, Type? returnType, Type[] types, System.Reflection.ParameterModifier[]? modifiers);
public System.Reflection.PropertyInfo GetProperty(string name, System.Reflection.BindingFlags bindingAttr, System.Reflection.Binder binder, Type returnType, Type[] types, System.Reflection.ParameterModifier[] modifiers);
public System.Reflection.PropertyInfo? GetProperty(string name, System.Reflection.BindingFlags bindingAttr, System.Reflection.Binder? binder, Type? returnType, Type[] types, System.Reflection.ParameterModifier[]? modifiers);
[<System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicProperties | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicProperties)>]
abstract member GetProperty : string * System.Reflection.BindingFlags * System.Reflection.Binder * Type * Type[] * System.Reflection.ParameterModifier[] -> System.Reflection.PropertyInfo
override this.GetProperty : string * System.Reflection.BindingFlags * System.Reflection.Binder * Type * Type[] * System.Reflection.ParameterModifier[] -> System.Reflection.PropertyInfo
abstract member GetProperty : string * System.Reflection.BindingFlags * System.Reflection.Binder * Type * Type[] * System.Reflection.ParameterModifier[] -> System.Reflection.PropertyInfo
override this.GetProperty : string * System.Reflection.BindingFlags * System.Reflection.Binder * Type * Type[] * System.Reflection.ParameterModifier[] -> System.Reflection.PropertyInfo
Public Function GetProperty (name As String, bindingAttr As BindingFlags, binder As Binder, returnType As Type, types As Type(), modifiers As ParameterModifier()) As PropertyInfo
Parâmetros
- name
- String
A cadeia de caracteres que contém o nome da propriedade a ser obtido.
- bindingAttr
- BindingFlags
Uma combinação bit a bit dos valores de enumeração que especificam como a pesquisa é conduzida.
- ou -
Default para retornar null.
- binder
- Binder
Um objeto que define um conjunto de propriedades e habilita a associação, que pode envolver a seleção de um método sobrecarregado, a coerção de tipos de argumento e a invocação de um membro por meio da reflexão.
- ou -
Uma referência nula (Nothing em Visual Basic) para usar o DefaultBinder.
- returnType
- Type
O tipo de retorno da propriedade.
- types
- Type[]
Uma matriz de Type objetos que representa o número, a ordem e o tipo dos parâmetros para obter a propriedade indexada.
- ou -
Uma matriz vazia do tipo Type (ou seja, Tipos[] = novo Tipo[0]) para obter uma propriedade que não é indexada.
- modifiers
- ParameterModifier[]
Uma matriz de ParameterModifier objetos que representa os atributos associados ao elemento correspondente na types matriz. O associador padrão não processa esse parâmetro.
Retornos
Um objeto que representa a propriedade que corresponde aos requisitos especificados, se encontrado; caso contrário, null.
Implementações
- Atributos
Exceções
Mais de uma propriedade é encontrada com o nome especificado e correspondendo às restrições de associação especificadas.
types é multidimensional.
- ou -
modifiers é multidimensional.
- ou -
types e modifiers não têm o mesmo comprimento.
Um elemento de types é null.
Comentários
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 | No | No |
| Campo | No | Sim. Um campo permanece sempre oculto por nome e assinatura. |
| Event | 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 | No | Sim. Um método (virtual e não virtual) pode permanecer oculto por nome ou por nome e assinatura. |
| Tipo aninhado | No | No |
| Property | 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 |
Notes:
- 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.
Confira também
- PropertyInfo
- String
- BindingFlags
- Binder
- DefaultBinder
- ParameterModifier
- GetPropertyImpl(String, BindingFlags, Binder, Type, Type[], ParameterModifier[])
- GetProperties(BindingFlags)
Aplica-se a
GetProperty(String, Type, Type[], ParameterModifier[])
- Origem:
- Type.cs
- Origem:
- Type.cs
- Origem:
- Type.cs
- Origem:
- Type.cs
- Origem:
- Type.cs
Pesquisa a propriedade pública especificada cujos parâmetros correspondem aos tipos de argumento e modificadores especificados.
public:
System::Reflection::PropertyInfo ^ GetProperty(System::String ^ name, Type ^ returnType, cli::array <Type ^> ^ types, cli::array <System::Reflection::ParameterModifier> ^ modifiers);
public:
virtual System::Reflection::PropertyInfo ^ GetProperty(System::String ^ name, Type ^ returnType, cli::array <Type ^> ^ types, cli::array <System::Reflection::ParameterModifier> ^ modifiers);
[System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicProperties)]
public System.Reflection.PropertyInfo? GetProperty(string name, Type? returnType, Type[] types, System.Reflection.ParameterModifier[]? modifiers);
public System.Reflection.PropertyInfo GetProperty(string name, Type returnType, Type[] types, System.Reflection.ParameterModifier[] modifiers);
public System.Reflection.PropertyInfo? GetProperty(string name, Type? returnType, Type[] types, System.Reflection.ParameterModifier[]? modifiers);
[<System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicProperties)>]
member this.GetProperty : string * Type * Type[] * System.Reflection.ParameterModifier[] -> System.Reflection.PropertyInfo
member this.GetProperty : string * Type * Type[] * System.Reflection.ParameterModifier[] -> System.Reflection.PropertyInfo
abstract member GetProperty : string * Type * Type[] * System.Reflection.ParameterModifier[] -> System.Reflection.PropertyInfo
override this.GetProperty : string * Type * Type[] * System.Reflection.ParameterModifier[] -> System.Reflection.PropertyInfo
Public Function GetProperty (name As String, returnType As Type, types As Type(), modifiers As ParameterModifier()) As PropertyInfo
Parâmetros
- name
- String
A cadeia de caracteres que contém o nome da propriedade pública a ser obtido.
- returnType
- Type
O tipo de retorno da propriedade.
- types
- Type[]
Uma matriz de Type objetos que representa o número, a ordem e o tipo dos parâmetros para obter a propriedade indexada.
- ou -
Uma matriz vazia do tipo Type (ou seja, Tipos[] = novo Tipo[0]) para obter uma propriedade que não é indexada.
- modifiers
- ParameterModifier[]
Uma matriz de ParameterModifier objetos que representa os atributos associados ao elemento correspondente na types matriz. O associador padrão não processa esse parâmetro.
Retornos
Um objeto que representa a propriedade pública que corresponde aos requisitos especificados, se encontrado; caso contrário, null.
Implementações
- Atributos
Exceções
Mais de uma propriedade é encontrada com o nome especificado e correspondendo aos tipos de argumento e modificadores especificados.
types é multidimensional.
- ou -
modifiers é multidimensional.
- ou -
types e modifiers não têm o mesmo comprimento.
Um elemento de types é null.
Exemplos
O exemplo a seguir obtém um Type objeto correspondente e MyPropertyClassa propriedade indexada dessa classe é recuperada usando os argumentos passados para o GetProperty método.
using System;
using System.Reflection;
public class MyPropertyClass
{
private readonly int [,] _myPropertyArray = new int[10,10];
// Declare an indexer.
public int this [int i,int j]
{
get
{
return _myPropertyArray[i,j];
}
set
{
_myPropertyArray[i,j] = value;
}
}
}
public class MyTypeClass
{
public static void Main()
{
try
{
Type myType=typeof(MyPropertyClass);
Type[] myTypeArray = new Type[2];
// Create an instance of the Type array representing the number, order
// and type of the parameters for the property.
myTypeArray.SetValue(typeof(int),0);
myTypeArray.SetValue(typeof(int),1);
// Search for the indexed property whose parameters match the
// specified argument types and modifiers.
PropertyInfo myPropertyInfo = myType.GetProperty("Item",
typeof(int),myTypeArray,null);
Console.WriteLine(myType.FullName + "." + myPropertyInfo.Name +
" has a property type of " + myPropertyInfo.PropertyType);
}
catch(Exception ex)
{
Console.WriteLine("An exception occurred " + ex.Message);
}
}
}
open System
type MyPropertyClass() =
let myPropertyArray = Array2D.zeroCreate<int> 10 10
// Declare an indexed property.
member _.Item
with get (i, j) =
myPropertyArray[i, j]
and set (i, j) value =
myPropertyArray[i, j] <- value
try
let myType = typeof<MyPropertyClass>
let myTypeArray = Array.zeroCreate<Type> 2
// Create an instance of the Type array representing the number, order
// and type of the parameters for the property.
myTypeArray.SetValue(typeof<int>, 0)
myTypeArray.SetValue(typeof<int>, 1)
// Search for the indexed property whose parameters match the
// specified argument types and modifiers.
let myPropertyInfo = myType.GetProperty("Item", typeof<int>, myTypeArray, null)
printfn $"{myType.FullName}.{myPropertyInfo.Name} has a property type of {myPropertyInfo.PropertyType}"
with ex ->
printfn $"An exception occurred {ex.Message}"
Imports System.Reflection
Public Class MyPropertyClass
Private myPropertyArray(9, 9) As Integer
' Declare an indexer.
Default Public Property Item(ByVal i As Integer, ByVal j As Integer) As Integer
Get
Return myPropertyArray(i, j)
End Get
Set(ByVal Value As Integer)
myPropertyArray(i, j) = Value
End Set
End Property
End Class
Public Class MyTypeClass21
Public Shared Sub Run()
Try
Dim myType As Type = GetType(MyPropertyClass)
Dim myTypeArray(1) As Type
' Create an instance of a Type array representing the number, order
' and type of the parameters for the property.
myTypeArray.SetValue(GetType(Integer), 0)
myTypeArray.SetValue(GetType(Integer), 1)
' Search for the indexed property whose parameters match the
' specified argument types and modifiers.
Dim myPropertyInfo As PropertyInfo = myType.GetProperty("Item",
GetType(Integer), myTypeArray, Nothing)
Console.WriteLine(myType.FullName + "." + myPropertyInfo.Name +
" has a property type of " + myPropertyInfo.PropertyType.ToString())
Catch ex As Exception
Console.WriteLine("An exception occurred " + ex.Message.ToString())
End Try
End Sub
End Class
Comentários
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.
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 pesquisa de name diferencia maiúsculas de minúsculas. A pesquisa inclui propriedades de instância estática pública e pública.
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.
Confira também
- PropertyInfo
- String
- DefaultBinder
- ParameterModifier
- GetPropertyImpl(String, BindingFlags, Binder, Type, Type[], ParameterModifier[])
- GetProperties(BindingFlags)
Aplica-se a
GetProperty(String, Type[])
- Origem:
- Type.cs
- Origem:
- Type.cs
- Origem:
- Type.cs
- Origem:
- Type.cs
- Origem:
- Type.cs
Pesquisa a propriedade pública especificada cujos parâmetros correspondem aos tipos de argumento especificados.
public:
System::Reflection::PropertyInfo ^ GetProperty(System::String ^ name, cli::array <Type ^> ^ types);
public:
virtual System::Reflection::PropertyInfo ^ GetProperty(System::String ^ name, cli::array <Type ^> ^ types);
[System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicProperties)]
public System.Reflection.PropertyInfo? GetProperty(string name, Type[] types);
public System.Reflection.PropertyInfo GetProperty(string name, Type[] types);
public System.Reflection.PropertyInfo? GetProperty(string name, Type[] types);
[<System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicProperties)>]
member this.GetProperty : string * Type[] -> System.Reflection.PropertyInfo
member this.GetProperty : string * Type[] -> System.Reflection.PropertyInfo
abstract member GetProperty : string * Type[] -> System.Reflection.PropertyInfo
override this.GetProperty : string * Type[] -> System.Reflection.PropertyInfo
Public Function GetProperty (name As String, types As Type()) As PropertyInfo
Parâmetros
- name
- String
A cadeia de caracteres que contém o nome da propriedade pública a ser obtido.
- types
- Type[]
Uma matriz de Type objetos que representa o número, a ordem e o tipo dos parâmetros para obter a propriedade indexada.
- ou -
Uma matriz vazia do tipo Type (ou seja, Tipos[] = novo Tipo[0]) para obter uma propriedade que não é indexada.
Retornos
Um objeto que representa a propriedade pública cujos parâmetros correspondem aos tipos de argumento especificados, se encontrado; caso contrário, null.
Implementações
- Atributos
Exceções
Mais de uma propriedade é encontrada com o nome especificado e correspondendo aos tipos de argumento especificados.
types é multidimensional.
Um elemento de types é null.
Exemplos
O exemplo a seguir recupera o Type objeto de uma classe definida pelo usuário, recupera a propriedade dessa classe e exibe o nome da propriedade e o tipo da propriedade, conforme especificado pelos argumentos passados para GetProperty.
using System;
using System.Reflection;
class MyClass3
{
private readonly int[,] _myArray = { { 1, 2 }, { 3, 4 } };
// Declare an indexer.
public int this[int i, int j]
{
get
{
return _myArray[i, j];
}
set
{
_myArray[i, j] = value;
}
}
}
public class MyTypeClass3
{
public static void Main(string[] args)
{
try
{
// Get the Type object.
Type myType = typeof(MyClass3);
Type[] myTypeArr = new Type[2];
// Create an instance of a Type array.
myTypeArr.SetValue(typeof(int), 0);
myTypeArr.SetValue(typeof(int), 1);
// Get the PropertyInfo object for the indexed property Item, which has two integer parameters.
PropertyInfo myPropInfo = myType.GetProperty("Item", myTypeArr);
// Display the property.
Console.WriteLine("The {0} property exists in MyClass3.",
myPropInfo.ToString());
}
catch (NullReferenceException e)
{
Console.WriteLine("An exception occurred.");
Console.WriteLine("Source : {0}", e.Source);
Console.WriteLine("Message : {0}", e.Message);
}
}
}
open System
type MyClass1() =
let myArray = array2D [[1; 2]; [3; 4]]
// Declare an indexed property.
member _.Item
with get (i, j) =
myArray[i, j]
and set (i, j) value =
myArray[i, j] <- value
try
// Get the Type object.
let myType = typeof<MyClass1>
let myTypeArr = Array.zeroCreate<Type> 2
// Create an instance of a Type array.
myTypeArr.SetValue(typeof<int>, 0)
myTypeArr.SetValue(typeof<int>, 1)
// Get the PropertyInfo object for the indexed property Item, which has two integer parameters.
let myPropInfo = myType.GetProperty("Item", myTypeArr)
// Display the property.
printfn $"The {myPropInfo} property exists in MyClass1."
with :? NullReferenceException as e ->
printfn "An exception occurred."
printfn $"Source : {e.Source}"
printfn $"Message : {e.Message}"
Imports System.Reflection
Module Module3
Class MyClass3
Private myArray As Integer(,) = {{1, 2}, {3, 4}}
' Declare an indexer.
Default Public Property Item(ByVal i As Integer, ByVal j As Integer) As Integer
Get
Return myArray(i, j)
End Get
Set(ByVal Value As Integer)
myArray(i, j) = Value
End Set
End Property
End Class
Public Class MyTypeClass3
Public Shared Sub Run()
Try
' Get the Type Object.
Dim myType As Type = GetType(MyClass3)
Dim myTypeArr(1) As Type
' Create an instance of a Type array.
myTypeArr.SetValue(GetType(Integer), 0)
myTypeArr.SetValue(GetType(Integer), 1)
' Get the PropertyInfo object for the indexed property Item, which has two integer parameters.
Dim myPropInfo As PropertyInfo = myType.GetProperty("Item", myTypeArr)
' Display the property.
Console.WriteLine("The {0} property exists in MyClass3.", myPropInfo.ToString())
Catch e As NullReferenceException
Console.WriteLine("An exception occurred.")
Console.WriteLine("Source : {0}", e.Source.ToString())
Console.WriteLine("Message : {0}", e.Message.ToString())
End Try
End Sub
End Class
End Module 'Module3
Comentários
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.
A pesquisa de name diferencia maiúsculas de minúsculas. A pesquisa inclui propriedades de instância estática pública e pública.
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.
Confira também
- PropertyInfo
- String
- DefaultBinder
- GetPropertyImpl(String, BindingFlags, Binder, Type, Type[], ParameterModifier[])
- GetProperties(BindingFlags)
Aplica-se a
GetProperty(String, Type)
- Origem:
- Type.cs
- Origem:
- Type.cs
- Origem:
- Type.cs
- Origem:
- Type.cs
- Origem:
- Type.cs
Pesquisa a propriedade pública com o nome e o tipo de retorno especificados.
public:
System::Reflection::PropertyInfo ^ GetProperty(System::String ^ name, Type ^ returnType);
public:
virtual System::Reflection::PropertyInfo ^ GetProperty(System::String ^ name, Type ^ returnType);
[System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicProperties)]
public System.Reflection.PropertyInfo? GetProperty(string name, Type? returnType);
public System.Reflection.PropertyInfo GetProperty(string name, Type returnType);
public System.Reflection.PropertyInfo? GetProperty(string name, Type? returnType);
[<System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicProperties)>]
member this.GetProperty : string * Type -> System.Reflection.PropertyInfo
member this.GetProperty : string * Type -> System.Reflection.PropertyInfo
abstract member GetProperty : string * Type -> System.Reflection.PropertyInfo
override this.GetProperty : string * Type -> System.Reflection.PropertyInfo
Public Function GetProperty (name As String, returnType As Type) As PropertyInfo
Parâmetros
- name
- String
A cadeia de caracteres que contém o nome da propriedade pública a ser obtido.
- returnType
- Type
O tipo de retorno da propriedade.
Retornos
Um objeto que representa a propriedade pública com o nome especificado, se encontrado; caso contrário, null.
Implementações
- Atributos
Exceções
Mais de uma propriedade é encontrada com o nome especificado.
name é null, ou returnType é null.
Exemplos
O exemplo a seguir define uma classe com uma propriedade e recupera o nome e o tipo da propriedade.
using System;
using System.Reflection;
class MyPropertyTypeClass
{
public string MyProperty1 { get; set; } = "Hello World.";
}
class TestClass
{
static void Main()
{
try
{
Type myType = typeof(MyPropertyTypeClass);
// Get the PropertyInfo object representing MyProperty1.
PropertyInfo myStringProperties1 = myType.GetProperty("MyProperty1", typeof(string));
Console.WriteLine("The name of the first property of MyPropertyTypeClass is {0}.",
myStringProperties1.Name);
Console.WriteLine("The type of the first property of MyPropertyTypeClass is {0}.",
myStringProperties1.PropertyType);
}
catch (ArgumentNullException e)
{
Console.WriteLine("ArgumentNullException :" + e.Message);
}
catch (AmbiguousMatchException e)
{
Console.WriteLine("AmbiguousMatchException :" + e.Message);
}
catch (NullReferenceException e)
{
Console.WriteLine("Source : {0}", e.Source);
Console.WriteLine("Message : {0}", e.Message);
}
//Output:
//The name of the first property of MyPropertyTypeClass is MyProperty1.
//The type of the first property of MyPropertyTypeClass is System.String.
}
}
open System
open System.Reflection
type MyClass1() =
let mutable myMessage = "Hello World."
member _.MyProperty1
with get () =
myMessage
and set (value) =
myMessage <- value
try
let myType = typeof<MyClass1>
// Get the PropertyInfo object representing MyProperty1.
let myStringProperties1 = myType.GetProperty("MyProperty1", typeof<string>)
printfn $"The name of the first property of MyClass1 is {myStringProperties1.Name}."
printfn $"The type of the first property of MyClass1 is {myStringProperties1.PropertyType}."
with
| :? ArgumentNullException as e ->
printfn $"ArgumentNullException :{e.Message}"
| :? AmbiguousMatchException as e ->
printfn $"AmbiguousMatchException :{e.Message}"
| :? NullReferenceException as e ->
printfn $"Source : {e.Source}"
printfn $"Message : {e.Message}"
// Output:
// The name of the first property of MyClass1 is MyProperty1.
// The type of the first property of MyClass1 is System.String.
Imports System.Reflection
Class MyTypesClass
Private myMessage As [String] = "Hello World."
Public Property MyProperty1() As String
Get
Return myMessage
End Get
Set(ByVal Value As String)
myMessage = Value
End Set
End Property
End Class
Class TestClass
Shared Sub Run()
Try
Dim myType As Type = GetType(MyTypesClass)
' Get the PropertyInfo object representing MyProperty1.
Dim myStringProperties1 As PropertyInfo = myType.GetProperty("MyProperty1", GetType(String))
Console.WriteLine("The name of the first property of MyTypesClass is {0}.", myStringProperties1.Name)
Console.WriteLine("The type of the first property of MyTypesClass is {0}.", myStringProperties1.PropertyType.ToString())
Catch e As ArgumentNullException
Console.WriteLine("ArgumentNullException :" + e.Message.ToString())
Catch e As AmbiguousMatchException
Console.WriteLine("AmbiguousMatchException :" + e.Message.ToString())
Catch e As NullReferenceException
Console.WriteLine("Source : {0}", e.Source.ToString())
Console.WriteLine("Message : {0}", e.Message.ToString())
End Try
'Output:
'The name of the first property of MyTypesClass is MyProperty1.
'The type of the first property of MyTypesClass is System.String.
End Sub
End Class
Comentários
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.
A pesquisa de name diferencia maiúsculas de minúsculas. A pesquisa inclui propriedades de instância estática pública e pública.
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.
Confira também
- PropertyInfo
- String
- DefaultBinder
- GetPropertyImpl(String, BindingFlags, Binder, Type, Type[], ParameterModifier[])
- GetProperties(BindingFlags)
Aplica-se a
GetProperty(String, BindingFlags)
- Origem:
- Type.cs
- Origem:
- Type.cs
- Origem:
- Type.cs
- Origem:
- Type.cs
- Origem:
- Type.cs
Pesquisa a propriedade especificada usando as restrições de associação especificadas.
public:
virtual System::Reflection::PropertyInfo ^ GetProperty(System::String ^ name, System::Reflection::BindingFlags bindingAttr);
[System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicProperties | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicProperties)]
public System.Reflection.PropertyInfo? GetProperty(string name, System.Reflection.BindingFlags bindingAttr);
public System.Reflection.PropertyInfo GetProperty(string name, System.Reflection.BindingFlags bindingAttr);
public System.Reflection.PropertyInfo? GetProperty(string name, System.Reflection.BindingFlags bindingAttr);
[<System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicProperties | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicProperties)>]
abstract member GetProperty : string * System.Reflection.BindingFlags -> System.Reflection.PropertyInfo
override this.GetProperty : string * System.Reflection.BindingFlags -> System.Reflection.PropertyInfo
abstract member GetProperty : string * System.Reflection.BindingFlags -> System.Reflection.PropertyInfo
override this.GetProperty : string * System.Reflection.BindingFlags -> System.Reflection.PropertyInfo
Public Function GetProperty (name As String, bindingAttr As BindingFlags) As PropertyInfo
Parâmetros
- name
- String
A cadeia de caracteres que contém o nome da propriedade a ser obtido.
- bindingAttr
- BindingFlags
Uma combinação bit a bit dos valores de enumeração que especificam como a pesquisa é conduzida.
- ou -
Default para retornar null.
Retornos
Um objeto que representa a propriedade que corresponde aos requisitos especificados, se encontrado; caso contrário, null.
Implementações
- Atributos
Exceções
Mais de uma propriedade é encontrada com o nome especificado e correspondendo às restrições de associação especificadas.
name é null.
Exemplos
O exemplo a seguir recupera o tipo de uma classe definida pelo usuário, recupera uma propriedade dessa classe e exibe o nome da propriedade de acordo com as restrições de associação especificadas.
using System;
using System.Reflection;
class MyClass2
{
// Declare MyProperty.
public int MyProperty { get; set; }
}
public class MyTypeClass2
{
public static void Main(string[] args)
{
try
{
// Get Type object of MyClass2.
Type myType = typeof(MyClass2);
// Get the PropertyInfo by passing the property name and specifying the BindingFlags.
PropertyInfo myPropInfo = myType.GetProperty(
"MyProperty",
BindingFlags.Public | BindingFlags.Instance
);
// Display Name property to console.
Console.WriteLine("{0} is a property of MyClass2.", myPropInfo.Name);
}
catch (NullReferenceException e)
{
Console.WriteLine("MyProperty does not exist in MyClass2." + e.Message);
}
}
}
open System
open System.Reflection
type MyClass() =
let mutable myProperty = 0
// Declare MyProperty.
member _.MyProperty
with get () =
myProperty
and set (value) =
myProperty <- value
try
// Get Type object of MyClass.
let myType = typeof<MyClass>
// Get the PropertyInfo by passing the property name and specifying the BindingFlags.
let myPropInfo = myType.GetProperty("MyProperty", BindingFlags.Public ||| BindingFlags.Instance)
// Display Name property to console.
printfn $"{myPropInfo.Name} is a property of MyClass."
with :? NullReferenceException as e ->
printfn $"MyProperty does not exist in MyClass.{e.Message}"
Imports System.Reflection
Module Module1
Public Class MyClass1
Private myProperty1 As Integer
Public Property MyProperty() As Integer
Get
Return myProperty1
End Get
Set(ByVal Value As Integer)
myProperty1 = Value
End Set
End Property
Public Shared Sub Run()
Try
' Get a Type object corresponding to MyClass.
Dim myType As Type = GetType(MyClass1)
' Get a PropertyInfo object by passing property name and specifying BindingFlags.
Dim myPropInfo As PropertyInfo = myType.GetProperty("MyProperty", BindingFlags.Public Or BindingFlags.Instance)
' Display the Name property.
Console.WriteLine("{0} is a property of MyClass.", myPropInfo.Name)
Catch e As NullReferenceException
Console.WriteLine("MyProperty does not exist in MyClass.", e.Message.ToString())
End Try
End Sub
End Class
End Module 'Module1
Confira também
- PropertyInfo
- String
- BindingFlags
- DefaultBinder
- GetPropertyImpl(String, BindingFlags, Binder, Type, Type[], ParameterModifier[])
- GetProperties(BindingFlags)
Aplica-se a
GetProperty(String)
- Origem:
- Type.cs
- Origem:
- Type.cs
- Origem:
- Type.cs
- Origem:
- Type.cs
- Origem:
- Type.cs
Pesquisa a propriedade pública com o nome especificado.
public:
System::Reflection::PropertyInfo ^ GetProperty(System::String ^ name);
public:
virtual System::Reflection::PropertyInfo ^ GetProperty(System::String ^ name);
[System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicProperties)]
public System.Reflection.PropertyInfo? GetProperty(string name);
public System.Reflection.PropertyInfo GetProperty(string name);
public System.Reflection.PropertyInfo? GetProperty(string name);
[<System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicProperties)>]
member this.GetProperty : string -> System.Reflection.PropertyInfo
member this.GetProperty : string -> System.Reflection.PropertyInfo
abstract member GetProperty : string -> System.Reflection.PropertyInfo
override this.GetProperty : string -> System.Reflection.PropertyInfo
Public Function GetProperty (name As String) As PropertyInfo
Parâmetros
- name
- String
A cadeia de caracteres que contém o nome da propriedade pública a ser obtido.
Retornos
Um objeto que representa a propriedade pública com o nome especificado, se encontrado; caso contrário, null.
Implementações
- Atributos
Exceções
Mais de uma propriedade é encontrada com o nome especificado.
name é null.
Exemplos
O exemplo a seguir recupera o Type objeto de uma classe definida pelo usuário, recupera uma propriedade dessa classe e exibe o nome da propriedade.
using System;
using System.Reflection;
class MyClass1
{
// Declare MyProperty.
public int MyProperty { get; set; }
}
public class MyTypeClass1
{
public static void Main(string[] args)
{
try
{
// Get the Type object corresponding to MyClass1.
Type myType = typeof(MyClass1);
// Get the PropertyInfo object by passing the property name.
PropertyInfo myPropInfo = myType.GetProperty("MyProperty");
// Display the property name.
Console.WriteLine("The {0} property exists in MyClass1.", myPropInfo.Name);
}
catch (NullReferenceException e)
{
Console.WriteLine("The property does not exist in MyClass1." + e.Message);
}
}
}
open System
type MyClass() =
let mutable myProperty = 0
// Declare MyProperty.
member _.MyProperty
with get () =
myProperty
and set (value) =
myProperty <- value
try
// Get the Type object corresponding to MyClass.
let myType = typeof<MyClass>
// Get the PropertyInfo object by passing the property name.
let myPropInfo = myType.GetProperty "MyProperty"
// Display the property name.
printfn $"The {myPropInfo.Name} property exists in MyClass."
with :? NullReferenceException as e ->
printfn $"The property does not exist in MyClass.{e.Message}"
Imports System.Reflection
Class MyClass1
Private myProperty1 As Integer
' Declare MyProperty.
Public Property MyProperty() As Integer
Get
Return MyProperty1
End Get
Set(ByVal Value As Integer)
MyProperty1 = Value
End Set
End Property
End Class
Public Class MyTypeClass
Public Shared Sub Run(ByVal args() As String)
Try
' Get Type Object corresponding to MyClass.
Dim myType As Type = GetType(MyClass1)
' Get PropertyInfo object by passing property name.
Dim myPropInfo As PropertyInfo = myType.GetProperty("MyProperty")
' Display Name property to console.
Console.WriteLine("The {0} property exists in MyClass.", myPropInfo.Name)
Catch e As NullReferenceException
Console.WriteLine("The property does not exist in MyClass.", e.Message.ToString())
End Try
End Sub
End Class
Comentários
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 | No | No |
| Campo | No | Sim. Um campo permanece sempre oculto por nome e assinatura. |
| Event | 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 | No | Sim. Um método (virtual e não virtual) pode permanecer oculto por nome ou por nome e assinatura. |
| Tipo aninhado | No | No |
| Property | 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 |
Notes:
- 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.
Confira também
- PropertyInfo
- String
- DefaultBinder
- GetPropertyImpl(String, BindingFlags, Binder, Type, Type[], ParameterModifier[])
- GetProperties(BindingFlags)