Leer en inglés

Compartir a través de


Type.GetField Método

Definición

Obtiene un campo específico del objeto Type actual.

Sobrecargas

GetField(String)

Busca el campo público con el nombre especificado.

GetField(String, BindingFlags)

Busca el campo especificado mediante las restricciones de enlace especificadas.

GetField(String)

Source:
Type.cs
Source:
Type.cs
Source:
Type.cs

Busca el campo público con el nombre especificado.

C#
public System.Reflection.FieldInfo? GetField (string name);
C#
public System.Reflection.FieldInfo GetField (string name);

Parámetros

name
String

Cadena que contiene el nombre del campo de datos que se va a obtener.

Devoluciones

Objeto que representa el campo público con el nombre especificado, si se encuentra; en caso contrario, null.

Implementaciones

Excepciones

name es null.

Este objeto Type es un TypeBuilder a cuyo método CreateType() aún no se ha llamado.

Ejemplos

En el ejemplo siguiente se obtiene el Type objeto de la clase especificada, se obtiene el FieldInfo objeto del campo y se muestra el valor del campo.

C#

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));
    }
}

Comentarios

La búsqueda name distingue mayúsculas de minúsculas. La búsqueda incluye campos de instancia pública estática y pública.

Si el objeto actual Type representa un tipo genérico construido, este método devuelve con FieldInfo los parámetros de tipo reemplazados por los argumentos de tipo adecuados.

Si el objeto actual Type representa un parámetro de tipo en la definición de un tipo genérico o un método genérico, este método busca en los campos de la restricción de clase.

Consulte también

Se aplica a

.NET 9 y otras versiones
Producto Versiones
.NET Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 2.0, 2.1

GetField(String, BindingFlags)

Source:
Type.cs
Source:
Type.cs
Source:
Type.cs

Busca el campo especificado mediante las restricciones de enlace especificadas.

C#
public abstract System.Reflection.FieldInfo? GetField (string name, System.Reflection.BindingFlags bindingAttr);
C#
public abstract System.Reflection.FieldInfo GetField (string name, System.Reflection.BindingFlags bindingAttr);

Parámetros

name
String

Cadena que contiene el nombre del campo de datos que se va a obtener.

bindingAttr
BindingFlags

Combinación bit a bit de los valores de enumeración que especifican cómo se realiza la búsqueda.

o bien

Default para devolver null.

Devoluciones

Objeto que representa el campo que cumple los requisitos especificados, si se encuentra; en caso contrario, es null.

Implementaciones

Excepciones

name es null.

Ejemplos

En el ejemplo siguiente se obtiene el Type objeto de la clase especificada, se obtiene el FieldInfo objeto para el campo que coincide con las marcas de enlace especificadas y se muestra el valor del campo.

C#

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));
    }
}

Comentarios

En la tabla siguiente se muestra qué miembros de una clase base devuelven los Get métodos al reflejar en un tipo.

Tipo de miembro Estático No estático
Constructor No No
Campo No Sí. Un campo siempre se oculta por nombre y firma.
evento No es aplicable La regla del sistema de tipos común es que la herencia es la misma que la de los métodos que implementan la propiedad . La reflexión trata las propiedades como hide-by-name-and-signature. Consulte la nota 2 a continuación.
Método No Sí. Un método (tanto virtual como no virtual) puede ser hide-by-name u hide-by-name-and-signature.
Tipo anidado No No
Propiedad. No es aplicable La regla del sistema de tipos común es que la herencia es la misma que la de los métodos que implementan la propiedad . La reflexión trata las propiedades como hide-by-name-and-signature. Consulte la nota 2 a continuación.
  1. Hide-by-name-and-signature tiene en cuenta todas las partes de la firma, incluidos modificadores personalizados, tipos de valor devuelto, tipos de parámetros, sentinels y convenciones de llamada no administradas. Se trata de una comparación binaria.

  2. Para la reflexión, las propiedades y los eventos son hide-by-name-and-signature. Si tiene una propiedad con un descriptor de acceso get y un set en la clase base, pero la clase derivada solo tiene un descriptor de acceso get, la propiedad de clase derivada oculta la propiedad de clase base y no podrá tener acceso al establecedor en la clase base.

  3. Los atributos personalizados no forman parte del sistema de tipos común.

Las marcas de filtro siguientes BindingFlags se pueden usar para definir los campos que se van a incluir en la búsqueda:

  • Debe especificar o BindingFlags.InstanceBindingFlags.Static para obtener una devolución.

  • Especifique BindingFlags.Public para incluir campos públicos en la búsqueda.

  • Especifique BindingFlags.NonPublic que incluya campos no públicos (es decir, campos privados, internos y protegidos) en la búsqueda.

  • Especifique BindingFlags.FlattenHierarchy para incluir public y protected miembros estáticos en la jerarquía; private no se incluyen los miembros estáticos de las clases heredadas.

Se pueden usar las marcas modificadores siguientes BindingFlags para cambiar el funcionamiento de la búsqueda:

  • BindingFlags.IgnoreCase para pasar por alto el caso de name.

  • BindingFlags.DeclaredOnly para buscar solo los campos declarados en Type, no los campos que simplemente se heredaron.

Vea System.Reflection.BindingFlags para obtener más información.

Si el objeto actual Type representa un tipo genérico construido, este método devuelve con FieldInfo los parámetros de tipo reemplazados por los argumentos de tipo adecuados.

Si el objeto actual Type representa un parámetro de tipo en la definición de un tipo genérico o un método genérico, este método busca en los campos de la restricción de clase.

Consulte también

Se aplica a

.NET 9 y otras versiones
Producto Versiones
.NET Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 2.0, 2.1