Type.GetFields Metode

Definisi

Mendapatkan bidang dari saat ini Type.

Overload

Nama Deskripsi
GetFields()

Mengembalikan semua bidang publik dari .Type

GetFields(BindingFlags)

Saat ditimpa di kelas turunan, cari bidang yang ditentukan untuk saat ini Type, menggunakan batasan pengikatan yang ditentukan.

GetFields()

Sumber:
Type.cs
Sumber:
Type.cs
Sumber:
Type.cs
Sumber:
Type.cs
Sumber:
Type.cs

Mengembalikan semua bidang publik dari .Type

public:
 cli::array <System::Reflection::FieldInfo ^> ^ GetFields();
public:
 virtual cli::array <System::Reflection::FieldInfo ^> ^ GetFields();
[System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicFields)]
public System.Reflection.FieldInfo[] GetFields();
public System.Reflection.FieldInfo[] GetFields();
[<System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicFields)>]
member this.GetFields : unit -> System.Reflection.FieldInfo[]
member this.GetFields : unit -> System.Reflection.FieldInfo[]
abstract member GetFields : unit -> System.Reflection.FieldInfo[]
override this.GetFields : unit -> System.Reflection.FieldInfo[]
Public Function GetFields () As FieldInfo()

Mengembalikan

Array FieldInfo objek yang mewakili semua bidang publik yang ditentukan untuk .Type

-atau-

Array kosong jenis FieldInfo, jika tidak ada bidang publik yang ditentukan untuk saat ini Type.

Penerapan

Atribut

Contoh

Contoh berikut menunjukkan penggunaan GetFields() metode .

using System;
using System.Reflection;
using System.ComponentModel.Design;

class FieldInfo_IsSpecialName
{
    public static void Main()
    {
        try
        {
            // Get the type handle of a specified class.
            Type myType = typeof(ViewTechnology);

            // Get the fields of the specified class.
            FieldInfo[] myField = myType.GetFields();

            Console.WriteLine("\nDisplaying fields that have SpecialName attributes:\n");
            for(int i = 0; i < myField.Length; i++)
            {
                // Determine whether or not each field is a special name.
                if(myField[i].IsSpecialName)
                {
                    Console.WriteLine("The field {0} has a SpecialName attribute.",
                        myField[i].Name);
                }
            }
        }
        catch(Exception e)
        {
            Console.WriteLine("Exception : {0} " , e.Message);
        }
    }
}
open System.ComponentModel.Design

try
    // Get the type handle of a specified class.
    let myType = typeof<ViewTechnology>

    // Get the fields of the specified class.
    let myFields = myType.GetFields()

    printfn $"\nDisplaying fields that have SpecialName attributes:\n"
    for field in myFields do
        // Determine whether or not each field is a special name.
        if field.IsSpecialName then
            printfn $"The field {field.Name} has a SpecialName attribute."
with e ->
    printfn $"Exception : {e.Message} "
Imports System.Reflection
Imports System.ComponentModel.Design

Class FieldInfo_IsSpecialName

    Public Shared Sub Main()
        Try
            ' Get the type handle of a specified class.
            Dim myType As Type = GetType(ViewTechnology)

            ' Get the fields of a specified class.
            Dim myField As FieldInfo() = myType.GetFields()

            Console.WriteLine(ControlChars.Cr + "Displaying fields that have SpecialName attributes:" + ControlChars.Cr)
            Dim i As Integer
            For i = 0 To myField.Length - 1
                ' Determine whether or not each field is a special name.
                If myField(i).IsSpecialName Then
                    Console.WriteLine("The field {0} has a SpecialName attribute.", myField(i).Name)
                End If
            Next i
        Catch e As Exception
            Console.WriteLine("Exception : {0} ", e.Message.ToString())
        End Try
    End Sub
End Class

Keterangan

Dalam .NET 6 dan versi yang lebih lama, metode GetFields tidak mengembalikan bidang dalam urutan tertentu, seperti urutan alfabet atau deklarasi. Kode Anda tidak boleh bergantung pada urutan di mana bidang dikembalikan, karena urutan tersebut bervariasi. Namun, dimulai dengan .NET 7, pemesanan bersifat deterministik berdasarkan urutan metadata dalam perakitan.

Tabel berikut menunjukkan anggota-anggota kelas dasar yang dikembalikan oleh metode-metode Get ketika mencerminkan tipe.

Tipe Anggota Static Tidak Statis
Constructor Tidak Tidak
Ladang Tidak Yes. Bidang selalu disembunyikan berdasarkan nama dan tanda tangan.
Kejadian Tidak teraplikasi Aturan sistem jenis umum adalah bahwa pewarisan sama dengan metode yang mengimplementasikan properti . Pantulan memperlakukan properti sebagai hide-by-name-and-signature. Lihat catatan 2 di bawah ini.
Metode Tidak Yes. Metode (baik virtual maupun non-virtual) dapat disembunyikan berdasarkan nama atau berdasarkan nama dan tanda tangan.
Tipe Berlapis Tidak Tidak
Property Tidak teraplikasi Aturan sistem jenis umum adalah bahwa pewarisan sama dengan metode yang mengimplementasikan properti . Pantulan memperlakukan properti sebagai hide-by-name-and-signature. Lihat catatan 2 di bawah ini.
  1. Hide-by-name-and-signature mempertimbangkan semua komponen tanda tangan, termasuk modifikasi khusus, tipe pengembalian, tipe parameter, sentinel, dan konvensi pemanggilan yang tidak dikelola. Ini adalah perbandingan biner.

  2. Untuk refleksi, sifat dan kejadian disembunyikan berdasarkan nama dan tanda tangan. Jika Anda memiliki properti dengan aksesor get dan set di kelas dasar, tetapi kelas turunan hanya memiliki aksesor get, properti kelas turunan menyembunyikan properti kelas dasar, dan Anda tidak akan dapat mengakses setter pada kelas dasar.

  3. Atribut kustom bukan bagian dari sistem jenis umum.

Jika saat ini Type mewakili jenis generik yang dibangun, metode ini mengembalikan FieldInfo objek dengan parameter jenis yang digantikan oleh argumen jenis yang sesuai.

Jika saat ini Type mewakili parameter jenis dalam definisi jenis generik atau metode generik, metode ini mencari bidang publik dari batasan kelas.

Lihat juga

Berlaku untuk

GetFields(BindingFlags)

Sumber:
Type.cs
Sumber:
Type.cs
Sumber:
Type.cs
Sumber:
Type.cs
Sumber:
Type.cs

Saat ditimpa di kelas turunan, cari bidang yang ditentukan untuk saat ini Type, menggunakan batasan pengikatan yang ditentukan.

public:
 abstract cli::array <System::Reflection::FieldInfo ^> ^ GetFields(System::Reflection::BindingFlags bindingAttr);
[System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicFields | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicFields)]
public abstract System.Reflection.FieldInfo[] GetFields(System.Reflection.BindingFlags bindingAttr);
public abstract System.Reflection.FieldInfo[] GetFields(System.Reflection.BindingFlags bindingAttr);
[<System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicFields | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicFields)>]
abstract member GetFields : System.Reflection.BindingFlags -> System.Reflection.FieldInfo[]
abstract member GetFields : System.Reflection.BindingFlags -> System.Reflection.FieldInfo[]
Public MustOverride Function GetFields (bindingAttr As BindingFlags) As FieldInfo()

Parameter

bindingAttr
BindingFlags

Kombinasi bitwise dari nilai enumerasi yang menentukan bagaimana pencarian dilakukan.

-atau-

Default untuk mengembalikan array kosong.

Mengembalikan

Array FieldInfo objek yang mewakili semua bidang yang ditentukan untuk saat ini Type yang cocok dengan batasan pengikatan yang ditentukan.

-atau-

Array kosong jenis FieldInfo, jika tidak ada bidang yang ditentukan untuk saat ini Type, atau jika tidak ada bidang yang ditentukan yang cocok dengan batasan pengikatan.

Penerapan

Atribut

Contoh

Contoh berikut menunjukkan penggunaan GetFields(BindingFlags) metode .


using System;
using System.Reflection;

class AttributesSample
{
    public void Mymethod (int int1m, out string str2m, ref string str3m)
    {
        str2m = "in Mymethod";
    }

    public static int Main(string[] args)
    {
        Console.WriteLine ("Reflection.MethodBase.Attributes Sample");

        // Get the type.
        Type MyType = Type.GetType("AttributesSample");

        // Get the method Mymethod on the type.
        MethodBase Mymethodbase = MyType.GetMethod("Mymethod");

        // Display the method name.
        Console.WriteLine("Mymethodbase = " + Mymethodbase);

        // Get the MethodAttribute enumerated value.
        MethodAttributes Myattributes = Mymethodbase.Attributes;

        // Display the flags that are set.
        PrintAttributes(typeof(System.Reflection.MethodAttributes), (int) Myattributes);
        return 0;
    }

    public static void PrintAttributes(Type attribType, int iAttribValue)
    {
        if (!attribType.IsEnum)
        {
            Console.WriteLine("This type is not an enum.");
            return;
        }

        FieldInfo[] fields = attribType.GetFields(BindingFlags.Public | BindingFlags.Static);
        for (int i = 0; i < fields.Length; i++)
        {
            int fieldvalue = (int)fields[i].GetValue(null);
            if ((fieldvalue & iAttribValue) == fieldvalue)
            {
                Console.WriteLine(fields[i].Name);
            }
        }
    }
}
open System
open System.Reflection

type AttributesSample() =
    member _.Mymethod(int1m: int, str2m: string outref, str3m: string byref) =
        str2m <- "in Mymethod"

let printAttributes (attribType: Type) iAttribValue =
    if not attribType.IsEnum then
        printfn "This type is not an enum."
    else
        let fields = attribType.GetFields(BindingFlags.Public ||| BindingFlags.Static)
        for f in fields do
            let fieldvalue = f.GetValue null :?> int
            if fieldvalue &&& iAttribValue = fieldvalue then
                printfn $"{f.Name}"

printfn "Reflection.MethodBase.Attributes Sample"

// Get the type.
let MyType = Type.GetType "AttributesSample"

// Get the method Mymethod on the type.
let Mymethodbase = MyType.GetMethod "Mymethod"

// Display the method name.
printfn $"Mymethodbase = {Mymethodbase}"

// Get the MethodAttribute enumerated value.
let Myattributes = Mymethodbase.Attributes

// Display the flags that are set.
printAttributes typeof<MethodAttributes> (int Myattributes)
Imports System.Reflection

Class AttributesSample

    Public Sub Mymethod(ByVal int1m As Integer, ByRef str2m As String, ByRef str3m As String)
        str2m = "in Mymethod"
    End Sub

    Public Shared Function Main(ByVal args() As String) As Integer
        Console.WriteLine("Reflection.MethodBase.Attributes Sample")

        ' Get the type.
        Dim MyType As Type = Type.GetType("AttributesSample")

        ' Get the method Mymethod on the type.
        Dim Mymethodbase As MethodBase = MyType.GetMethod("Mymethod")

        ' Display the method name.
        Console.WriteLine("Mymethodbase = {0}.", Mymethodbase)

        ' Get the MethodAttribute enumerated value.
        Dim Myattributes As MethodAttributes = Mymethodbase.Attributes

        ' Display the flags that are set.
        PrintAttributes(GetType(System.Reflection.MethodAttributes), CInt(Myattributes))
        Return 0
    End Function 'Main

    Public Shared Sub PrintAttributes(ByVal attribType As Type, ByVal iAttribValue As Integer)
        If Not attribType.IsEnum Then
            Console.WriteLine("This type is not an enum.")
            Return
        End If
        Dim fields As FieldInfo() = attribType.GetFields((BindingFlags.Public Or BindingFlags.Static))
        Dim i As Integer
        For i = 0 To fields.Length - 1
            Dim fieldvalue As Integer = CType(fields(i).GetValue(Nothing), Int32)
            If (fieldvalue And iAttribValue) = fieldvalue Then
                Console.WriteLine(fields(i).Name)
            End If
        Next i
    End Sub
End Class

Keterangan

GetFields(BindingFlags) Agar kelebihan beban berhasil mengambil informasi properti, bindingAttr argumen harus menyertakan setidaknya satu dari BindingFlags.Instance dan BindingFlags.Static, bersama dengan setidaknya satu dari BindingFlags.NonPublic dan BindingFlags.Public.

Bendera filter berikut BindingFlags dapat digunakan untuk menentukan bidang mana yang akan disertakan dalam pencarian:

  • Tentukan BindingFlags.Instance untuk menyertakan metode instans.

  • Tentukan BindingFlags.Static untuk menyertakan metode statis.

  • Tentukan BindingFlags.Public untuk menyertakan bidang publik dalam pencarian.

  • Tentukan untuk menyertakan bidang non-publik (yaitu bidang privat, internal, dan terlindungi BindingFlags.NonPublic ) dalam pencarian. Hanya bidang yang dilindungi dan internal pada kelas dasar yang dikembalikan; bidang privat pada kelas dasar tidak dikembalikan.

  • Tentukan BindingFlags.FlattenHierarchy untuk menyertakan public dan protected anggota statis dalam hierarki ke atas; anggota statis seperti private di kelas yang diwariskan tidak disertakan.

  • Tentukan BindingFlags.Default saja untuk mengembalikan array kosong PropertyInfo .

Bendera pengubah berikut BindingFlags dapat digunakan untuk mengubah cara kerja pencarian:

  • BindingFlags.DeclaredOnly untuk mencari hanya bidang yang dideklarasikan pada Type, bukan bidang yang hanya diwariskan.

Lihat System.Reflection.BindingFlags untuk informasi lebih lanjut.

Dalam .NET 6 dan versi yang lebih lama, metode GetFields tidak mengembalikan bidang dalam urutan tertentu, seperti urutan alfabet atau deklarasi. Kode Anda tidak boleh bergantung pada urutan di mana bidang dikembalikan, karena urutan tersebut bervariasi. Namun, dimulai dengan .NET 7, pemesanan bersifat deterministik berdasarkan urutan metadata dalam perakitan.

Jika saat ini Type mewakili jenis generik yang dibangun, metode ini mengembalikan FieldInfo objek dengan parameter jenis yang digantikan oleh argumen jenis yang sesuai.

Jika saat ini Type mewakili parameter jenis dalam definisi jenis generik atau metode generik, metode ini mencari bidang publik dari batasan kelas.

Lihat juga

Berlaku untuk