FieldInfo 类

发现字段属性 (Attribute) 并提供对字段元数据的访问权。

**命名空间:**System.Reflection
**程序集:**mscorlib(在 mscorlib.dll 中)

语法

声明
<SerializableAttribute> _
<ComVisibleAttribute(True)> _
<ClassInterfaceAttribute(ClassInterfaceType.None)> _
Public MustInherit Class FieldInfo
    Inherits MemberInfo
    Implements _FieldInfo
用法
Dim instance As FieldInfo
[SerializableAttribute] 
[ComVisibleAttribute(true)] 
[ClassInterfaceAttribute(ClassInterfaceType.None)] 
public abstract class FieldInfo : MemberInfo, _FieldInfo
[SerializableAttribute] 
[ComVisibleAttribute(true)] 
[ClassInterfaceAttribute(ClassInterfaceType::None)] 
public ref class FieldInfo abstract : public MemberInfo, _FieldInfo
/** @attribute SerializableAttribute() */ 
/** @attribute ComVisibleAttribute(true) */ 
/** @attribute ClassInterfaceAttribute(ClassInterfaceType.None) */ 
public abstract class FieldInfo extends MemberInfo implements _FieldInfo
SerializableAttribute 
ComVisibleAttribute(true) 
ClassInterfaceAttribute(ClassInterfaceType.None) 
public abstract class FieldInfo extends MemberInfo implements _FieldInfo

备注

字段信息是从元数据中获取的。FieldInfo 类没有公共构造函数。通过调用 Type 对象的 GetFieldsGetField 方法可获取 FieldInfo 对象。

字段是在类中定义的变量。FieldInfo 提供对类中字段的元数据的访问权并为字段提供动态 set 和 get 功能。直到在对象上调用了 invoke 或 get 时,该类才加载到内存中。

给继承者的说明 当从 FieldInfo 继承时,必须重写下列成员:GetValueSetValue

示例

下面的示例使用 Type.GetFields 方法从 FieldInfo 类获取与字段相关的信息,然后显示字段属性 (Attribute)。

Imports System
Imports System.Reflection
Imports Microsoft.VisualBasic

Public Class FieldInfoClass
    Public myField1 As Integer = 0
    Protected myField2 As String = Nothing

    Public Shared Sub Main()
        Dim myFieldInfo() As FieldInfo
        Dim myType As Type = GetType(FieldInfoClass)
        ' Get the type and fields of FieldInfoClass.
        myFieldInfo = myType.GetFields(BindingFlags.NonPublic Or _
                      BindingFlags.Instance Or BindingFlags.Public)
        Console.WriteLine(ControlChars.NewLine & "The fields of " & _
                      "FieldInfoClass class are " & ControlChars.NewLine)
        ' Display the field information of FieldInfoClass.
        Dim i As Integer
        For i = 0 To myFieldInfo.Length - 1
            Console.WriteLine(ControlChars.NewLine + "Name            : {0}", myFieldInfo(i).Name)
            Console.WriteLine("Declaring Type  : {0}", myFieldInfo(i).DeclaringType)
            Console.WriteLine("IsPublic        : {0}", myFieldInfo(i).IsPublic)
            Console.WriteLine("MemberType      : {0}", myFieldInfo(i).MemberType)
            Console.WriteLine("FieldType       : {0}", myFieldInfo(i).FieldType)
            Console.WriteLine("IsFamily        : {0}", myFieldInfo(i).IsFamily)
        Next i
    End Sub
End Class
using System;
using System.Reflection;

public class FieldInfoClass
{
    public int myField1 = 0;
    protected string myField2 = null;
    public static void Main()
    {
        FieldInfo[] myFieldInfo;
        Type myType = typeof(FieldInfoClass);
        // Get the type and fields of FieldInfoClass.
        myFieldInfo = myType.GetFields(BindingFlags.NonPublic | BindingFlags.Instance
            | BindingFlags.Public);
        Console.WriteLine("\nThe fields of " + 
            "FieldInfoClass are \n");
        // Display the field information of FieldInfoClass.
        for(int i = 0; i < myFieldInfo.Length; i++)
        {
            Console.WriteLine("\nName            : {0}", myFieldInfo[i].Name);
            Console.WriteLine("Declaring Type  : {0}", myFieldInfo[i].DeclaringType);
            Console.WriteLine("IsPublic        : {0}", myFieldInfo[i].IsPublic);
            Console.WriteLine("MemberType      : {0}", myFieldInfo[i].MemberType);
            Console.WriteLine("FieldType       : {0}", myFieldInfo[i].FieldType);
            Console.WriteLine("IsFamily        : {0}", myFieldInfo[i].IsFamily);
        }
    }
}
using namespace System;
using namespace System::Reflection;
public ref class FieldInfoClass
{
public:
   int myField1;

protected:
   String^ myField2;
};

int main()
{
   array<FieldInfo^>^myFieldInfo;
   Type^ myType = FieldInfoClass::typeid;

   // Get the type and fields of FieldInfoClass.
   myFieldInfo = myType->GetFields( static_cast<BindingFlags>(BindingFlags::NonPublic | BindingFlags::Instance | BindingFlags::Public) );
   Console::WriteLine( "\nThe fields of FieldInfoClass are \n" );

   // Display the field information of FieldInfoClass.
   for ( int i = 0; i < myFieldInfo->Length; i++ )
   {
      Console::WriteLine( "\nName            : {0}", myFieldInfo[ i ]->Name );
      Console::WriteLine( "Declaring Type  : {0}", myFieldInfo[ i ]->DeclaringType );
      Console::WriteLine( "IsPublic        : {0}", myFieldInfo[ i ]->IsPublic );
      Console::WriteLine( "MemberType      : {0}", myFieldInfo[ i ]->MemberType );
      Console::WriteLine( "FieldType       : {0}", myFieldInfo[ i ]->FieldType );
      Console::WriteLine( "IsFamily        : {0}", myFieldInfo[ i ]->IsFamily );
   }
}
import System.*;
import System.Reflection.*;

public class FieldInfoClass
{
    public int myField1 = 0;
    protected String myField2 = null;

    public static void main(String[] args)
    {
        FieldInfo myFieldInfo[];
        Type myType = FieldInfoClass.class.ToType();

        // Get the type and fields of FieldInfoClass.
        myFieldInfo = myType.GetFields(BindingFlags.NonPublic 
            | BindingFlags.Instance | BindingFlags.Public);
        Console.WriteLine("\nThe fields of " + "FieldInfoClass are \n");

        // Display the field information of FieldInfoClass.
        for (int i = 0; i < myFieldInfo.length; i++) {
            Console.WriteLine("\nName            : {0}",
                myFieldInfo[i].get_Name());
            Console.WriteLine("Declaring Type  : {0}", 
                myFieldInfo[i].get_DeclaringType());
            Console.WriteLine("IsPublic        : {0}", 
                System.Convert.ToString(myFieldInfo[i].get_IsPublic()));
            Console.WriteLine("MemberType      : {0}", 
                myFieldInfo[i].get_MemberType());
            Console.WriteLine("FieldType       : {0}",
                myFieldInfo[i].get_FieldType());
            Console.WriteLine("IsFamily        : {0}",
                System.Convert.ToString(myFieldInfo[i].get_IsFamily()));
        }
    } //main
} //FieldInfoClass

继承层次结构

System.Object
   System.Reflection.MemberInfo
    System.Reflection.FieldInfo
       Microsoft.JScript.COMFieldInfo
       Microsoft.JScript.JSField
       Microsoft.JScript.JSFieldInfo
       System.Reflection.Emit.FieldBuilder

线程安全

此类型的任何公共静态(Visual Basic 中的 Shared)成员都是线程安全的,但不保证所有实例成员都是线程安全的。

平台

Windows 98、Windows 2000 SP4、Windows CE、Windows Millennium Edition、Windows Mobile for Pocket PC、Windows Mobile for Smartphone、Windows Server 2003、Windows XP Media Center Edition、Windows XP Professional x64 Edition、Windows XP SP2、Windows XP Starter Edition

.NET Framework 并不是对每个平台的所有版本都提供支持。有关受支持版本的列表,请参见系统要求

版本信息

.NET Framework

受以下版本支持:2.0、1.1、1.0

.NET Compact Framework

受以下版本支持:2.0、1.0

请参见

参考

FieldInfo 成员
System.Reflection 命名空间
Type