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
- Наследование
- Атрибуты
Поля
| Имя | Значение | Описание |
|---|---|---|
| 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.
Перечисленное значение — это число, представляющее побитовое ИЛИ атрибутов, реализованных в поле.