FieldAttributes Перечисление

Определение

Задает флаги, описывающие атрибуты поля.

Это перечисление поддерживает побитовую комбинацию значений его членов.

public enum class FieldAttributes
[System.Flags]
public enum FieldAttributes
[System.Flags]
[System.Serializable]
public enum FieldAttributes
[System.Flags]
[System.Serializable]
[System.Runtime.InteropServices.ComVisible(true)]
public enum FieldAttributes
[<System.Flags>]
type FieldAttributes = 
[<System.Flags>]
[<System.Serializable>]
type FieldAttributes = 
[<System.Flags>]
[<System.Serializable>]
[<System.Runtime.InteropServices.ComVisible(true)>]
type FieldAttributes = 
Public Enum FieldAttributes
Наследование
FieldAttributes
Атрибуты

Поля

Имя Значение Описание
PrivateScope 0

Указывает, что поле нельзя ссылаться.

Private 1

Указывает, что поле доступно только родительским типом.

FamANDAssem 2

Указывает, что поле доступно только подтипами в этой сборке.

Assembly 3

Указывает, что поле доступно во всей сборке.

Family 4

Указывает, что поле доступно только по типам и подтипам.

FamORAssem 5

Указывает, что поле доступно подтипами в любом месте, а также во всей этой сборке.

Public 6

Указывает, что поле доступно любому участнику, для которого эта область видна.

FieldAccessMask 7

Задает уровень доступа заданного поля.

Static 16

Указывает, что поле представляет определенный тип или другое значение является для каждого экземпляра.

InitOnly 32

Указывает, что поле инициализировано только и может быть задано только в тексте конструктора.

Literal 64

Указывает, что значение поля является константой времени компиляции (статической или ранней привязки). Любая попытка задать ее вызывает FieldAccessException.

NotSerialized 128

Указывает, что поле не должно сериализоваться при удаленном удалении типа.

HasFieldRVA 256

Указывает, что поле имеет относительный виртуальный адрес (RVA). RVA — это расположение текста метода в текущем изображении, как адрес относительно начала файла изображения, в котором он расположен.

SpecialName 512

Задает специальный метод с именем, описывающим, как этот метод является специальным.

RTSpecialName 1024

Указывает, что среда CLR (внутренние API метаданных) должна проверять кодировку имен.

HasFieldMarshal 4096

Указывает, что поле содержит сведения о маршалинге.

PinvokeImpl 8192

Зарезервировано для дальнейшего использования.

HasDefault 32768

Указывает, что поле имеет значение по умолчанию.

ReservedMask 38144

Зарезервировано.

Примеры

В этом примере создаются три поля и FieldAttributes отображаются значения. Значение FieldAttributes может содержать несколько атрибутов, например оба Public и Literal, как показано в третьем поле.

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.Reflection

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 маскирования только частей значения атрибута, относящихся к специальным возможностям. Например, следующий код определяет, имеет ли Attributes общедоступный битовый набор.

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класс, сначала получите класс Type. Из Typeполучите FieldInfo. Из FieldInfoполучите Attributes.

Перечисленное значение — это число, представляющее побитовое ИЛИ атрибутов, реализованных в поле.

Применяется к