Type.GetField 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 um campo específico do atual Type.
Sobrecargas
| Nome | Description |
|---|---|
| GetField(String) |
Pesquisa o campo público com o nome especificado. |
| GetField(String, BindingFlags) |
Pesquisa o campo especificado usando as restrições de associação especificadas. |
GetField(String)
Pesquisa o campo público com o nome especificado.
public:
virtual System::Reflection::FieldInfo ^ GetField(System::String ^ name);
public:
System::Reflection::FieldInfo ^ GetField(System::String ^ name);
public System.Reflection.FieldInfo GetField(string name);
abstract member GetField : string -> System.Reflection.FieldInfo
override this.GetField : string -> System.Reflection.FieldInfo
member this.GetField : string -> System.Reflection.FieldInfo
Public Function GetField (name As String) As FieldInfo
Parâmetros
- name
- String
A cadeia de caracteres que contém o nome do campo de dados a ser obtido.
Retornos
Um objeto que representa o campo público com o nome especificado, se encontrado; caso contrário, null.
Implementações
Exceções
name é null.
Este Type objeto é um TypeBuilder cujo CreateType() método ainda não foi chamado.
Exemplos
O exemplo a seguir obtém o Type objeto da classe especificada, obtém o FieldInfo objeto para o campo e exibe o valor do campo.
using System;
using System.Reflection;
public class MyFieldClassA
{
public string Field = "A Field";
}
public class MyFieldClassB
{
private string field = "B Field";
public string Field
{
get
{
return field;
}
set
{
if (field!=value)
{
field=value;
}
}
}
}
public class MyFieldInfoClass
{
public static void Main()
{
MyFieldClassB myFieldObjectB = new MyFieldClassB();
MyFieldClassA myFieldObjectA = new MyFieldClassA();
Type myTypeA = typeof(MyFieldClassA);
FieldInfo myFieldInfo = myTypeA.GetField("Field");
Type myTypeB = typeof(MyFieldClassB);
FieldInfo myFieldInfo1 = myTypeB.GetField("field",
BindingFlags.NonPublic | BindingFlags.Instance);
Console.WriteLine("The value of the public field is: '{0}'",
myFieldInfo.GetValue(myFieldObjectA));
Console.WriteLine("The value of the private field is: '{0}'",
myFieldInfo1.GetValue(myFieldObjectB));
}
}
open System.Reflection
type MyFieldClassA =
val public Field: string
new () = { Field = "A Field"}
type MyFieldClassB() =
let field = "B Field"
member _.Field
with get () = field
let myFieldObjectB = MyFieldClassB()
let myFieldObjectA = MyFieldClassA()
let myTypeA = typeof<MyFieldClassA>
let myFieldInfo = myTypeA.GetField "Field"
let myTypeB = typeof<MyFieldClassB>
let myFieldInfo1 = myTypeB.GetField("field", BindingFlags.NonPublic ||| BindingFlags.Instance)
printfn $"The value of the public field is: '{myFieldInfo.GetValue myFieldObjectA}'"
printfn $"The value of the private field is: '{myFieldInfo1.GetValue myFieldObjectB}'"
Imports System.Reflection
Public Class MyFieldClassA
Public Field As String = "A Field"
End Class
Public Class MyFieldClassB
Private myField As String = "B Field"
Public Property Field() As String
Get
Return myField
End Get
Set(ByVal Value As String)
If myField <> value Then
myField = value
End If
End Set
End Property
End Class
Public Class MyFieldInfoClass
Public Shared Sub Main()
Dim myFieldObjectB As New MyFieldClassB()
Dim myFieldObjectA As New MyFieldClassA()
Dim myTypeA As Type = GetType(MyFieldClassA)
Dim myFieldInfo As FieldInfo = myTypeA.GetField("Field")
Dim myTypeB As Type = GetType(MyFieldClassB)
Dim myFieldInfo1 As FieldInfo = myTypeB.GetField("myField", _
BindingFlags.NonPublic Or BindingFlags.Instance)
Console.WriteLine("The value of the public field is: '{0}'", _
myFieldInfo.GetValue(myFieldObjectA))
Console.WriteLine("The value of the private field is: '{0}'", _
myFieldInfo1.GetValue(myFieldObjectB))
End Sub
End Class
Comentários
A pesquisa de name diferencia maiúsculas de minúsculas. A pesquisa inclui campos de instância pública e estática pública.
Se o atual Type representar um tipo genérico construído, este método retorna o FieldInfo 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á os campos da restrição de classe.
Confira também
Aplica-se a
GetField(String, BindingFlags)
Pesquisa o campo especificado usando as restrições de associação especificadas.
public:
abstract System::Reflection::FieldInfo ^ GetField(System::String ^ name, System::Reflection::BindingFlags bindingAttr);
public abstract System.Reflection.FieldInfo GetField(string name, System.Reflection.BindingFlags bindingAttr);
abstract member GetField : string * System.Reflection.BindingFlags -> System.Reflection.FieldInfo
Public MustOverride Function GetField (name As String, bindingAttr As BindingFlags) As FieldInfo
Parâmetros
- name
- String
A cadeia de caracteres que contém o nome do campo de dados 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 o campo que corresponde aos requisitos especificados, se encontrado; caso contrário, null.
Implementações
Exceções
name é null.
Exemplos
O exemplo a seguir obtém o Type objeto da classe especificada, obtém o FieldInfo objeto para o campo que corresponde aos sinalizadores de associação especificados e exibe o valor do campo.
using System;
using System.Reflection;
public class MyFieldClassA
{
public string Field = "A Field";
}
public class MyFieldClassB
{
private string field = "B Field";
public string Field
{
get
{
return field;
}
set
{
if (field!=value)
{
field=value;
}
}
}
}
public class MyFieldInfoClass
{
public static void Main()
{
MyFieldClassB myFieldObjectB = new MyFieldClassB();
MyFieldClassA myFieldObjectA = new MyFieldClassA();
Type myTypeA = typeof(MyFieldClassA);
FieldInfo myFieldInfo = myTypeA.GetField("Field");
Type myTypeB = typeof(MyFieldClassB);
FieldInfo myFieldInfo1 = myTypeB.GetField("field",
BindingFlags.NonPublic | BindingFlags.Instance);
Console.WriteLine("The value of the public field is: '{0}'",
myFieldInfo.GetValue(myFieldObjectA));
Console.WriteLine("The value of the private field is: '{0}'",
myFieldInfo1.GetValue(myFieldObjectB));
}
}
open System.Reflection
type MyFieldClassA =
val public Field: string
new () = { Field = "A Field"}
type MyFieldClassB() =
let field = "B Field"
member _.Field
with get () = field
let myFieldObjectB = MyFieldClassB()
let myFieldObjectA = MyFieldClassA()
let myTypeA = typeof<MyFieldClassA>
let myFieldInfo = myTypeA.GetField "Field"
let myTypeB = typeof<MyFieldClassB>
let myFieldInfo1 = myTypeB.GetField("field", BindingFlags.NonPublic ||| BindingFlags.Instance)
printfn $"The value of the public field is: '{myFieldInfo.GetValue myFieldObjectA}'"
printfn $"The value of the private field is: '{myFieldInfo1.GetValue myFieldObjectB}'"
Imports System.Reflection
Public Class MyFieldClassA
Public Field As String = "A Field"
End Class
Public Class MyFieldClassB
Private myField As String = "B Field"
Public Property Field() As String
Get
Return myField
End Get
Set(ByVal Value As String)
If myField <> value Then
myField = value
End If
End Set
End Property
End Class
Public Class MyFieldInfoClass
Public Shared Sub Main()
Dim myFieldObjectB As New MyFieldClassB()
Dim myFieldObjectA As New MyFieldClassA()
Dim myTypeA As Type = GetType(MyFieldClassA)
Dim myFieldInfo As FieldInfo = myTypeA.GetField("Field")
Dim myTypeB As Type = GetType(MyFieldClassB)
Dim myFieldInfo1 As FieldInfo = myTypeB.GetField("myField", _
BindingFlags.NonPublic Or BindingFlags.Instance)
Console.WriteLine("The value of the public field is: '{0}'", _
myFieldInfo.GetValue(myFieldObjectA))
Console.WriteLine("The value of the private field is: '{0}'", _
myFieldInfo1.GetValue(myFieldObjectB))
End Sub
End Class
Comentários
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. A reflexão trata as propriedades como hide-by-name-and-signature. Veja a observação 2 abaixo. |
| 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. A reflexão trata as propriedades como hide-by-name-and-signature. Veja a observação 2 abaixo. |
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 campos incluir na pesquisa:
Você deve especificar ou
BindingFlags.InstanceouBindingFlags.Staticpara obter um retorno.Especifique
BindingFlags.Publicpara incluir campos públicos na pesquisa.Especifique
BindingFlags.NonPublicpara incluir campos não públicos (ou seja, privados, internos e protegidos) 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 os campos declarados nos Typecampos, não que foram simplesmente herdados.
Consulte System.Reflection.BindingFlags para obter mais informações.
Se o atual Type representar um tipo genérico construído, este método retorna o FieldInfo 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á os campos da restrição de classe.