Bagikan melalui


TypeAttributes Enum

Definisi

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

Berlaku untuk