FieldAttributes FieldAttributes FieldAttributes FieldAttributes Enum

定義

指定描述欄位屬性 (Attribute) 的旗標。Specifies flags that describe the attributes of a field.

此列舉具有 FlagsAttribute 個屬性允許以位元方式合併其成員值。

public enum class FieldAttributes
[System.Flags]
[System.Runtime.InteropServices.ComVisible(true)]
[System.Serializable]
public enum FieldAttributes
type FieldAttributes = 
Public Enum FieldAttributes
繼承
FieldAttributesFieldAttributesFieldAttributesFieldAttributes
屬性

欄位

Assembly Assembly Assembly Assembly 3

指定在整個組件中欄位是可存取的。Specifies that the field is accessible throughout the assembly.

FamANDAssem FamANDAssem FamANDAssem FamANDAssem 2

指定欄位只能由這個組件中的子型別存取。Specifies that the field is accessible only by subtypes in this assembly.

Family Family Family Family 4

指定欄位只能由型別和子型別存取。Specifies that the field is accessible only by type and subtypes.

FamORAssem FamORAssem FamORAssem FamORAssem 5

指定欄位可以在任何地方和整個組件中由子型別存取。Specifies that the field is accessible by subtypes anywhere, as well as throughout this assembly.

FieldAccessMask FieldAccessMask FieldAccessMask FieldAccessMask 7

指定特定欄位的存取層級。Specifies the access level of a given field.

HasDefault HasDefault HasDefault HasDefault 32768

指定此欄位含有預設值。Specifies that the field has a default value.

HasFieldMarshal HasFieldMarshal HasFieldMarshal HasFieldMarshal 4096

指定欄位含有封送處理 (Marshaling) 資訊。Specifies that the field has marshaling information.

HasFieldRVA HasFieldRVA HasFieldRVA HasFieldRVA 256

指定欄位含有相對虛擬位址 (RVA)。Specifies that the field has a relative virtual address (RVA). RVA 為目前影像中方法主體的位置,就像相對於影像檔所在位置的開始位址。The RVA is the location of the method body in the current image, as an address relative to the start of the image file in which it is located.

InitOnly InitOnly InitOnly InitOnly 32

指定欄位只初始化,而且只能在建構函式主體中設定。Specifies that the field is initialized only, and can be set only in the body of a constructor.

Literal Literal Literal Literal 64

指定欄位的值為編譯時期常數 (靜態或早期繫結),Specifies that the field's value is a compile-time (static or early bound) constant. 任何對其進行設定的嘗試都會擲回 FieldAccessExceptionAny attempt to set it throws a FieldAccessException.

NotSerialized NotSerialized NotSerialized NotSerialized 128

指定當型別為遠端時,欄位不必序列化。Specifies that the field does not have to be serialized when the type is remoted.

PinvokeImpl PinvokeImpl PinvokeImpl PinvokeImpl 8192

保留供未來使用。Reserved for future use.

Private Private Private Private 1

指定欄位只能由父型別存取。Specifies that the field is accessible only by the parent type.

PrivateScope PrivateScope PrivateScope PrivateScope 0

指定無法參考此欄位。Specifies that the field cannot be referenced.

Public Public Public Public 6

指定欄位可以讓能見到這個範圍的任何成員存取。Specifies that the field is accessible by any member for whom this scope is visible.

ReservedMask ReservedMask ReservedMask ReservedMask 38144

保留的。Reserved.

RTSpecialName RTSpecialName RTSpecialName RTSpecialName 1024

指定 Common Language Runtime (中繼資料內部 API) 應檢查名稱編碼方式。Specifies that the common language runtime (metadata internal APIs) should check the name encoding.

SpecialName SpecialName SpecialName SpecialName 512

指定特殊方法,具有描述方法是如何特殊的名稱。Specifies a special method, with the name describing how the method is special.

Static Static Static Static 16

指定表示定義型別的欄位,不然它就是一個執行個體。Specifies that the field represents the defined type, or else it is per-instance.

範例

在此範例中, 會建立三個欄位FieldAttributes , 並顯示值。In this example, three fields are built and the FieldAttributes values are displayed. 一個FieldAttributes值可以包含一個以上的屬性, Public例如和Literal, 如第三個欄位所示。A FieldAttributes value can contain more than one attribute, for example, both Public and Literal, as shown in the third field.

using namespace System;
using namespace System::Reflection;
using namespace System::Security::Permissions;

public ref class Demo
{
private:
    // Make three fields:
    // The first field is private.
    String^ m_field;

    // The second field is public.
public:
    String^ Field;

    // The third field is public and literal. 
    literal String^ FieldC = "String C";

    Demo() { m_field = "String A"; Field = "String B"; }
};

static void DisplayField(Object^ obj, FieldInfo^ f)
{ 
    // Display the field name, value, and attributes.
    //
    Console::WriteLine("{0} = \"{1}\"; attributes: {2}", 
        f->Name, f->GetValue(obj), f->Attributes);
};

void main()
{
    Console::WriteLine ("\nReflection.FieldAttributes");
    Demo^ d = gcnew Demo();

    // Get a Type object for Demo, and a FieldInfo for each of
    // the three fields. Use the FieldInfo to display field
    // name, value for the Demo object in d, and attributes.
    //
    Type^ myType = Demo::typeid;

    FieldInfo^ fiPrivate = myType->GetField("m_field",
        BindingFlags::NonPublic | BindingFlags::Instance);
    DisplayField(d, fiPrivate);

    FieldInfo^ fiPublic = myType->GetField("Field",
        BindingFlags::Public | BindingFlags::Instance);
    DisplayField(d, fiPublic);

    FieldInfo^ fiConstant = myType->GetField("FieldC",
        BindingFlags::Public | BindingFlags::Static);
    DisplayField(d, fiConstant);
}

/* This code example produces the following output:

Reflection.FieldAttributes
m_field = "String A"; attributes: Private
Field = "String B"; attributes: Public
FieldC = "String C"; attributes: Public, Static, Literal, HasDefault
 */
using System;
using System.Reflection;

public class Demo
{
    // Make three fields:
    // The first field is private.
    private string m_field = "String A";

    // The second field is public.
    public string Field = "String B";

    // The third field is public const (hence also literal and static),
    // with a default value.
    public const string FieldC = "String C";
}

public class Myfieldattributes
{
    public static void Main()
    {
        Console.WriteLine ("\nReflection.FieldAttributes");
        Demo d = new Demo();
 
        // Get a Type object for Demo, and a FieldInfo for each of
        // the three fields. Use the FieldInfo to display field
        // name, value for the Demo object in d, and attributes.
        //
        Type myType = typeof(Demo);
        FieldInfo fiPrivate = myType.GetField("m_field",
            BindingFlags.NonPublic | BindingFlags.Instance);
        DisplayField(d, fiPrivate);

        FieldInfo fiPublic = myType.GetField("Field",
            BindingFlags.Public | BindingFlags.Instance);
        DisplayField(d, fiPublic);

        FieldInfo fiConstant = myType.GetField("FieldC",
            BindingFlags.Public | BindingFlags.Static);
        DisplayField(d, fiConstant);
    }

    static void DisplayField(Object obj, FieldInfo f)
    { 
        // Display the field name, value, and attributes.
        //
        Console.WriteLine("{0} = \"{1}\"; attributes: {2}", 
            f.Name, f.GetValue(obj), f.Attributes);
    }
}

/* This code example produces the following output:

Reflection.FieldAttributes
m_field = "String A"; attributes: Private
Field = "String B"; attributes: Public
FieldC = "String C"; attributes: Public, Static, Literal, HasDefault
 */
Imports System
Imports System.Reflection
Imports Microsoft.VisualBasic

Public Class Demo
    ' Declare three fields.
    ' The first field is private.
    Private m_field As String = "String A"

    'The second field is public.
    Public Field As String = "String B"

    ' The third field is public and const, hence also static
    ' and literal with a default value.
    Public Const FieldC As String = "String C"

End Class

Module Module1
    Sub Main()
        ' Create an instance of the Demo class.
        Dim d As New Demo()

        Console.WriteLine(vbCrLf & "Reflection.FieldAttributes")

        ' Get a Type object for Demo, and a FieldInfo for each of
        ' the three fields. Use the FieldInfo to display field
        ' name, value for the Demo object in d, and attributes.
        '
        Dim myType As Type = GetType(Demo)

        Dim fiPrivate As FieldInfo = myType.GetField("m_field", _
            BindingFlags.NonPublic Or BindingFlags.Instance)
        DisplayField(d, fiPrivate)

        Dim fiPublic As FieldInfo = myType.GetField("Field", _
            BindingFlags.Public Or BindingFlags.Instance)
        DisplayField(d, fiPublic)

        Dim fiConstant As FieldInfo = myType.GetField("FieldC", _
            BindingFlags.Public Or BindingFlags.Static)
        DisplayField(d, fiConstant)
    End Sub

    Sub DisplayField(ByVal obj As Object, ByVal f As FieldInfo)

        ' Display the field name, value, and attributes.
        '
        Console.WriteLine("{0} = ""{1}""; attributes: {2}", _
            f.Name, f.GetValue(obj), f.Attributes)
    End Sub

End Module

' This code example produces the following output:
'
'm_field = "String A"; attributes: Private
'Field = "String B"; attributes: Public
'FieldC = "String C"; attributes: Public, Static, Literal, HasDefault

備註

FieldAttributes會使用的值FieldAccessMask , 只遮罩與存取範圍相關的屬性值部分。FieldAttributes uses the value from FieldAccessMask to mask off only the parts of the attribute value that pertain to the accessibility. 例如, 下列程式碼會判斷Attributes是否已設定公用位。For example, the following code determines if Attributes has the public bit set.

FieldInfo^ fi = obj->GetType()->GetField("field1");

if ((fi->Attributes & FieldAttributes::FieldAccessMask) ==
    FieldAttributes::Public)
{
    Console::WriteLine("{0:s} is public. Value: {1:d}", fi->Name, fi->GetValue(obj));
}
FieldInfo fi = obj.GetType().GetField("field1");

if ((fi.Attributes & FieldAttributes.FieldAccessMask) ==
    FieldAttributes.Public)
{
    Console.WriteLine("{0:s} is public. Value: {1:d}", fi.Name, fi.GetValue(obj));
}
Dim fi As FieldInfo = obj.GetType().GetField("field1")

If (fi.Attributes And FieldAttributes.FieldAccessMask) = _
    FieldAttributes.Public Then
    Console.WriteLine("{0:s} is public. Value: {1:d}", fi.Name, fi.GetValue(obj))
End If

若要取得FieldAttributes, 請先取得類別TypeTo get the FieldAttributes, first get the class Type. TypeFieldInfo取得。From the Type, get the FieldInfo. FieldInfoAttributes取得。From the FieldInfo, get the Attributes.

列舉值是一個數位, 代表在欄位上實作為屬性的位 OR。The enumerated value is a number representing the bitwise OR of the attributes implemented on the field.

適用於