Leggi in inglese

Condividi tramite


Type.GetField Metodo

Definizione

Ottiene un campo specifico dell'oggetto Type corrente.

Overload

GetField(String)

Cerca il campo pubblico con il nome specificato.

GetField(String, BindingFlags)

Cerca il campo specificato, usando i vincoli di binding specificati.

GetField(String)

Origine:
Type.cs
Origine:
Type.cs
Origine:
Type.cs

Cerca il campo pubblico con il nome specificato.

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

Parametri

name
String

Stringa contenente il nome del campo dati da ottenere.

Restituisce

Oggetto che rappresenta il campo pubblico con il nome specificato, se disponibile; in caso contrario, null.

Implementazioni

Eccezioni

name è null.

L'oggetto Type è un oggetto TypeBuilder il cui metodo CreateType() non è stato ancora chiamato.

Esempio

Nell'esempio seguente viene ottenuto l'oggetto Type per la classe specificata, viene ottenuto l'oggetto FieldInfo per il campo e viene visualizzato il valore 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));
    }
}

Commenti

La ricerca name fa distinzione tra maiuscole e minuscole. La ricerca include campi dell'istanza pubblica e statica pubblica.

Se l'oggetto corrente Type rappresenta un tipo generico costruito, questo metodo restituisce con FieldInfo i parametri di tipo sostituiti dagli argomenti di tipo appropriati.

Se l'oggetto corrente Type rappresenta un parametro di tipo nella definizione di un tipo generico o di un metodo generico, questo metodo cerca i campi del vincolo di classe.

Vedi anche

Si applica a

.NET 9 e altre versioni
Prodotto Versioni
.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)

Origine:
Type.cs
Origine:
Type.cs
Origine:
Type.cs

Cerca il campo specificato, usando i vincoli di binding specificati.

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

Parametri

name
String

Stringa contenente il nome del campo dati da ottenere.

bindingAttr
BindingFlags

Combinazione bit per bit di valori di enumerazione che specifica il modo in cui viene eseguita la ricerca.

-oppure-

Default per restituire null.

Restituisce

Oggetto che rappresenta il campo corrispondente ai requisiti specificati, se è stato trovato; in caso contrario, null.

Implementazioni

Eccezioni

name è null.

Esempio

Nell'esempio seguente viene ottenuto l'oggetto Type per la classe specificata, viene ottenuto l'oggetto FieldInfo per il campo corrispondente ai flag di associazione specificati e viene visualizzato il valore 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));
    }
}

Commenti

Nella tabella seguente vengono illustrati i membri di una classe base restituiti dai Get metodi quando si riflette su un tipo.

Tipo di membro Static Non statico
Costruttore No No
Campo No Sì. Un campo è sempre hide-by-name-and-signature.
Evento Non applicabile La regola di sistema dei tipi comune è che l'ereditarietà è uguale a quella dei metodi che implementano la proprietà . La reflection considera le proprietà come hide-by-name-and-signature. Vedere la nota 2 di seguito.
Metodo No Sì. Un metodo (sia virtuale che non virtuale) può essere hide-by-name o hide-by-name-and-signature.
Tipo annidato No No
Proprietà Non applicabile La regola di sistema dei tipi comune è che l'ereditarietà è uguale a quella dei metodi che implementano la proprietà . La reflection considera le proprietà come hide-by-name-and-signature. Vedere la nota 2 di seguito.
  1. Hide-by-name-and-signature considera tutte le parti della firma, inclusi modificatori personalizzati, tipi restituiti, tipi di parametro, sentinel e convenzioni di chiamata non gestite. Si tratta di un confronto binario.

  2. Per la reflection, le proprietà e gli eventi sono hide-by-name-and-signature. Se nella classe base è presente una proprietà con una funzione di accesso get e una funzione di accesso set, ma la classe derivata ha solo una funzione di accesso get, la proprietà della classe derivata nasconde la proprietà della classe base e non sarà possibile accedere al setter nella classe base.

  3. Gli attributi personalizzati non fanno parte del sistema di tipi comuni.

I flag di filtro seguenti BindingFlags possono essere usati per definire i campi da includere nella ricerca:

  • È necessario specificare BindingFlags.Instance o BindingFlags.Static per ottenere un ritorno.

  • Specificare BindingFlags.Public per includere i campi pubblici nella ricerca.

  • Specificare BindingFlags.NonPublic di includere campi non pubblici (ovvero campi privati, interni e protetti) nella ricerca.

  • Specificare BindingFlags.FlattenHierarchy di includere public e protected membri statici fino alla gerarchia. private I membri statici nelle classi ereditate non sono inclusi.

Per modificare il funzionamento della ricerca, è possibile usare i flag di modificatore seguenti BindingFlags :

  • BindingFlags.IgnoreCase per ignorare il caso di name.

  • BindingFlags.DeclaredOnly per cercare solo i campi dichiarati in Type, non i campi semplicemente ereditati.

Per altre informazioni, vedere System.Reflection.BindingFlags.

Se l'oggetto corrente Type rappresenta un tipo generico costruito, questo metodo restituisce con FieldInfo i parametri di tipo sostituiti dagli argomenti di tipo appropriati.

Se l'oggetto corrente Type rappresenta un parametro di tipo nella definizione di un tipo generico o di un metodo generico, questo metodo cerca i campi del vincolo di classe.

Vedi anche

Si applica a

.NET 9 e altre versioni
Prodotto Versioni
.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