TypeAttributes 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 atribut jenis.
Enumerasi ini mendukung kombinasi bitwise dari nilai yang termasuk di dalamnya.
public enum class TypeAttributes
[System.Flags]
public enum TypeAttributes
[System.Flags]
[System.Serializable]
public enum TypeAttributes
[System.Flags]
[System.Serializable]
[System.Runtime.InteropServices.ComVisible(true)]
public enum TypeAttributes
[<System.Flags>]
type TypeAttributes =
[<System.Flags>]
[<System.Serializable>]
type TypeAttributes =
[<System.Flags>]
[<System.Serializable>]
[<System.Runtime.InteropServices.ComVisible(true)>]
type TypeAttributes =
Public Enum TypeAttributes
- Warisan
- Atribut
Bidang
| Nama | Nilai | Deskripsi |
|---|---|---|
| AnsiClass | 0 | LPTSTR ditafsirkan sebagai ANSI. |
| AutoLayout | 0 | Menentukan bahwa bidang kelas secara otomatis ditata oleh runtime bahasa umum. |
| Class | 0 | Menentukan bahwa jenisnya adalah kelas. |
| NotPublic | 0 | Menentukan bahwa kelas tidak bersifat publik. |
| Public | 1 | Menentukan bahwa kelas bersifat publik. |
| NestedPublic | 2 | Menentukan bahwa kelas ditumpuk dengan visibilitas publik. |
| NestedPrivate | 3 | Menentukan bahwa kelas ditumpuk dengan visibilitas privat. |
| NestedFamily | 4 | Menentukan bahwa kelas disarangkan dengan visibilitas keluarga, dan dengan demikian hanya dapat diakses oleh metode dalam jenisnya sendiri dan jenis turunan apa pun. |
| NestedAssembly | 5 | Menentukan bahwa kelas disarangkan dengan visibilitas perakitan, dan dengan demikian hanya dapat diakses oleh metode dalam perakitannya. |
| NestedFamANDAssem | 6 | Menentukan bahwa kelas disarangkan dengan rakitan dan visibilitas keluarga, dan dengan demikian hanya dapat diakses dengan metode yang terletak di persimpangan keluarga dan perakitannya. |
| NestedFamORAssem | 7 | Menentukan bahwa kelas disarangkan dengan visibilitas keluarga atau perakitan, dan dengan demikian hanya dapat diakses dengan metode yang terletak di penyatuan keluarga dan perakitannya. |
| VisibilityMask | 7 | Menentukan informasi visibilitas jenis. |
| SequentialLayout | 8 | Menentukan bahwa bidang kelas ditata secara berurutan, dalam urutan yang dipancarkan bidang ke metadata. |
| ExplicitLayout | 16 | Menentukan bahwa bidang kelas ditata pada offset yang ditentukan. |
| ExtendedLayout | 24 | |
| LayoutMask | 24 | Menentukan informasi tata letak kelas. |
| ClassSemanticsMask | 32 | Menentukan informasi semantik kelas; kelas saat ini bersifat kontekstual (lain tangkas). |
| Interface | 32 | Menentukan bahwa jenis adalah antarmuka. |
| Abstract | 128 | Menentukan bahwa jenisnya abstrak. |
| Sealed | 256 | Menentukan bahwa kelas tersebut konkret dan tidak dapat diperpanjang. |
| SpecialName | 1024 | Menentukan bahwa kelas bersifat khusus dengan cara yang ditandai dengan nama. |
| RTSpecialName | 2048 | Runtime harus memeriksa pengodean nama. |
| Import | 4096 | Menentukan bahwa kelas atau antarmuka diimpor dari modul lain. |
| Serializable | 8192 | Menentukan bahwa kelas dapat diserialisasikan. |
| WindowsRuntime | 16384 | Menentukan tipe Windows Runtime. |
| UnicodeClass | 65536 | LPTSTR ditafsirkan sebagai UNICODE. |
| AutoClass | 131072 | LPTSTR ditafsirkan secara otomatis. |
| CustomFormatClass | 196608 | LPSTR ditafsirkan oleh beberapa cara khusus implementasi, yang mencakup kemungkinan melempar .NotSupportedException Tidak digunakan dalam implementasi Microsoft dari .NET Framework. |
| StringFormatMask | 196608 | Digunakan untuk mengambil informasi string untuk interoperabilitas asli. |
| HasSecurity | 262144 | Jenis memiliki kait keamanan dengannya. |
| ReservedMask | 264192 | Atribut yang dicadangkan untuk penggunaan runtime. |
| BeforeFieldInit | 1048576 | Menentukan bahwa memanggil metode statis jenis tidak memaksa sistem untuk menginisialisasi jenis. |
| CustomFormatMask | 12582912 | Digunakan untuk mengambil informasi pengodean non-standar untuk interop asli. Arti nilai dari 2 bit ini tidak ditentukan. Tidak digunakan dalam implementasi Microsoft dari .NET Framework. |
Contoh
Contoh berikut mengambil nilai Attributes properti untuk Type objek yang mewakili sejumlah jenis yang berbeda, lalu menentukan apakah bendera atribut individual telah ditetapkan.
using System;
using System.Reflection;
internal struct S
{
public int X;
}
public abstract class Example
{
protected sealed class NestedClass {}
public interface INested {}
public static void Main()
{
// Create an array of types.
Type[] types = { typeof(Example), typeof(NestedClass),
typeof(INested), typeof(S) };
foreach (var t in types)
{
Console.WriteLine("Attributes for type {0}:", t.Name);
TypeAttributes attr = t.Attributes;
// To test for visibility attributes, you must use the visibility mask.
TypeAttributes visibility = attr & TypeAttributes.VisibilityMask;
switch (visibility)
{
case TypeAttributes.NotPublic:
Console.WriteLine(" ...is not public");
break;
case TypeAttributes.Public:
Console.WriteLine(" ...is public");
break;
case TypeAttributes.NestedPublic:
Console.WriteLine(" ...is nested and public");
break;
case TypeAttributes.NestedPrivate:
Console.WriteLine(" ...is nested and private");
break;
case TypeAttributes.NestedFamANDAssem:
Console.WriteLine(" ...is nested, and inheritable only within the assembly" +
"\n (cannot be declared in C#)");
break;
case TypeAttributes.NestedAssembly:
Console.WriteLine(" ...is nested and internal");
break;
case TypeAttributes.NestedFamily:
Console.WriteLine(" ...is nested and protected");
break;
case TypeAttributes.NestedFamORAssem:
Console.WriteLine(" ...is nested and protected internal");
break;
}
// Use the layout mask to test for layout attributes.
TypeAttributes layout = attr & TypeAttributes.LayoutMask;
switch (layout)
{
case TypeAttributes.AutoLayout:
Console.WriteLine(" ...is AutoLayout");
break;
case TypeAttributes.SequentialLayout:
Console.WriteLine(" ...is SequentialLayout");
break;
case TypeAttributes.ExplicitLayout:
Console.WriteLine(" ...is ExplicitLayout");
break;
}
// Use the class semantics mask to test for class semantics attributes.
TypeAttributes classSemantics = attr & TypeAttributes.ClassSemanticsMask;
switch (classSemantics)
{
case TypeAttributes.Class:
if (t.IsValueType)
{
Console.WriteLine(" ...is a value type");
}
else
{
Console.WriteLine(" ...is a class");
}
break;
case TypeAttributes.Interface:
Console.WriteLine(" ...is an interface");
break;
}
if ((attr & TypeAttributes.Abstract) != 0)
{
Console.WriteLine(" ...is abstract");
}
if ((attr & TypeAttributes.Sealed) != 0)
{
Console.WriteLine(" ...is sealed");
}
Console.WriteLine();
}
}
}
// The example displays the following output:
// Attributes for type Example:
// ...is public
// ...is AutoLayout
// ...is a class
// ...is abstract
// Attributes for type NestedClass:
// ...is nested and protected
// ...is AutoLayout
// ...is a class
// ...is sealed
// Attributes for type INested:
// ...is nested and public
// ...is AutoLayout
// ...is an interface
// ...is abstract
// Attributes for type S:
// ...is not public
// ...is SequentialLayout
// ...is a value type
// ...is sealed
Imports System.Reflection
Friend Structure S
Public X As Integer
End Structure
Public MustInherit Class Example
Protected NotInheritable Class NestedClass
End Class
Public Interface INested
End Interface
Public Shared Sub Main()
' Create an array of types.
Dim types() As Type = { GetType(Example), GetType(NestedClass),
GetType(INested), GetType(S) }
For Each t In types
Console.WriteLine("Attributes for type {0}:", t.Name)
Dim attr As TypeAttributes = t.Attributes
' Use the visibility mask to test for visibility attributes.
Dim visibility As TypeAttributes = attr And TypeAttributes.VisibilityMask
Select Case visibility
Case TypeAttributes.NotPublic:
Console.WriteLine(" ...is not Public")
Case TypeAttributes.Public:
Console.WriteLine(" ...is Public")
Case TypeAttributes.NestedPublic:
Console.WriteLine(" ...is nested and Public")
Case TypeAttributes.NestedPrivate:
Console.WriteLine(" ...is nested and Private")
Case TypeAttributes.NestedFamANDAssem:
Console.WriteLine(" ...is nested, and inheritable only within the assembly" & _
vbLf & " (cannot be declared in Visual Basic)")
Case TypeAttributes.NestedAssembly:
Console.WriteLine(" ...is nested and Friend")
Case TypeAttributes.NestedFamily:
Console.WriteLine(" ...is nested and Protected")
Case TypeAttributes.NestedFamORAssem:
Console.WriteLine(" ...is nested and Protected Friend")
End Select
' Use the layout mask to test for layout attributes.
Dim layout As TypeAttributes = attr And TypeAttributes.LayoutMask
Select Case layout
Case TypeAttributes.AutoLayout:
Console.WriteLine(" ...is AutoLayout")
Case TypeAttributes.SequentialLayout:
Console.WriteLine(" ...is SequentialLayout")
Case TypeAttributes.ExplicitLayout:
Console.WriteLine(" ...is ExplicitLayout")
End Select
' Use the class semantics mask to test for class semantics attributes.
Dim classSemantics As TypeAttributes = attr And TypeAttributes.ClassSemanticsMask
Select Case classSemantics
Case TypeAttributes.Class:
If t.IsValueType Then
Console.WriteLine(" ...is a value type")
Else
Console.WriteLine(" ...is a class")
End If
Case TypeAttributes.Interface:
Console.WriteLine(" ...is an interface")
End Select
If 0 <> (attr And TypeAttributes.Abstract) Then _
Console.WriteLine(" ...is MustInherit")
If 0 <> (attr And TypeAttributes.Sealed) Then _
Console.WriteLine(" ...is NotInheritable")
Console.WriteLine()
Next
End Sub
End Class
' The example displays the following output:
' Attributes for type Example:
' ...is Public
' ...is AutoLayout
' ...is a class
' ...is MustInherit
'
' Attributes for type NestedClass:
' ...is nested and Protected
' ...is AutoLayout
' ...is a class
' ...is NotInheritable
'
' Attributes for type INested:
' ...is nested and Public
' ...is AutoLayout
' ...is an interface
' ...is MustInherit
'
' Attributes for type S:
' ...is not Public
' ...is SequentialLayout
' ...is a value type
' ...is NotInheritable
Keterangan
Beberapa anggota TypeAttributes enumerasi adalah masker yang mewakili sekumpulan atribut yang saling eksklusif. Misalnya, anggota menyertakan NotPublicanggota , , Public, NestedPublicNestedPrivate, NestedFamily, NestedAssembly, NestedFamANDAssem, dan NestedFamORAssem .VisibilityMask Karena setiap set atribut menyertakan anggota yang nilai dasarnya adalah nol, Anda harus terlebih dahulu And nilai masker dengan nilai tertentu System.Reflection.TypeAttributes yang diambil dari properti seperti Type.Attributes. Tabel berikut mencantumkan masker dan anggota individual yang mereka sertakan:
| Masker | Includes |
|---|---|
| VisibilityMask | NotPublic Umum NestedPublic NestedPrivate NestedFamily NestedAssembly NestedFamANDAssem NestedFamORAssem |
| LayoutMask | AutoLayout SequentialLayout ExplicitLayout |
| ClassSemanticsMask | Kelas Antarmuka |
| StringFormatMask | AnsiClass UnicodeClass AutoClass CustomFormatClass |
| CustomFormatMask | Tidak ada anggota. |
Anggota kelas enumerator ini cocok dengan enumerator CorTypeAttr seperti yang didefinisikan dalam file corhdr.h.