FieldAttributes Enum
Definisi
Penting
Beberapa informasi terkait produk prarilis yang dapat diubah secara signifikan sebelum dirilis. Microsoft tidak memberikan jaminan, tersirat maupun tersurat, sehubungan dengan informasi yang diberikan di sini.
Menentukan bendera yang menjelaskan atribut bidang.
Enumerasi ini mendukung kombinasi bitwise dari nilai yang termasuk di dalamnya.
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
- Warisan
- Atribut
Bidang
Assembly | 3 | Menentukan bahwa bidang dapat diakses di seluruh perakitan. |
FamANDAssem | 2 | Menentukan bahwa bidang hanya dapat diakses oleh subjenis dalam rakitan ini. |
Family | 4 | Menentukan bahwa bidang hanya dapat diakses berdasarkan jenis dan subjenis. |
FamORAssem | 5 | Menentukan bahwa bidang dapat diakses oleh subjenis di mana saja, serta di seluruh perakitan ini. |
FieldAccessMask | 7 | Menentukan tingkat akses bidang tertentu. |
HasDefault | 32768 | Menentukan bahwa bidang memiliki nilai default. |
HasFieldMarshal | 4096 | Menentukan bahwa bidang memiliki informasi marshaling. |
HasFieldRVA | 256 | Menentukan bahwa bidang memiliki alamat virtual relatif (RVA). RVA adalah lokasi isi metode dalam gambar saat ini, sebagai alamat relatif terhadap awal file gambar tempatnya berada. |
InitOnly | 32 | Menentukan bahwa bidang hanya diinisialisasi, dan hanya dapat diatur dalam isi konstruktor. |
Literal | 64 | Menentukan bahwa nilai bidang adalah konstanta waktu kompilasi (statis atau terikat awal). Setiap upaya untuk mengaturnya akan melempar FieldAccessException. |
NotSerialized | 128 | Menentukan bahwa bidang tidak harus diserialisasikan ketika jenisnya di-remote. |
PinvokeImpl | 8192 | Disiapkan untuk penggunaan masa mendatang. |
Private | 1 | Menentukan bahwa bidang hanya dapat diakses oleh jenis induk. |
PrivateScope | 0 | Menentukan bahwa bidang tidak dapat dirujuk. |
Public | 6 | Menentukan bahwa bidang dapat diakses oleh anggota mana pun yang cakupannya terlihat. |
ReservedMask | 38144 | Dicadangkan. |
RTSpecialName | 1024 | Menentukan bahwa runtime bahasa umum (API internal metadata) harus memeriksa pengodean nama. |
SpecialName | 512 | Menentukan metode khusus, dengan nama yang menjelaskan bagaimana metodenya khusus. |
Static | 16 | Menentukan bahwa bidang mewakili jenis yang ditentukan, atau merupakan per instans. |
Contoh
Dalam contoh ini, tiga bidang dibangun dan FieldAttributes
nilai ditampilkan. Nilai FieldAttributes
dapat berisi lebih dari satu atribut, misalnya, baik Public
dan Literal
, seperti yang ditunjukkan di bidang ketiga.
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.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
Keterangan
FieldAttributes
menggunakan nilai dari FieldAccessMask
untuk menutupi hanya bagian dari nilai atribut yang berkaitan dengan aksesibilitas. Misalnya, kode berikut menentukan apakah Attributes
memiliki set bit publik.
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
Untuk mendapatkan FieldAttributes
, pertama-tama dapatkan kelas Type
.
Type
Dari , dapatkan FieldInfo
.
FieldInfo
Dari , dapatkan Attributes
.
Nilai enumerasi adalah angka yang mewakili bitwise OR dari atribut yang diimplementasikan pada bidang .