TypeAttributes 列舉

定義

指定類型屬性 (Attribute)。

此列舉支援其成員值的位元組合。

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
繼承
TypeAttributes
屬性

欄位

Abstract 128

指定此類型為抽象。

AnsiClass 0

LPTSTR 被解譯為 ANSI。

AutoClass 131072

LPTSTR 會自動被解譯。

AutoLayout 0

指定類別欄位會由 Common Language Runtime 自動配置。

BeforeFieldInit 1048576

指定呼叫類型的靜態 (Static) 方法時不要強制系統將類型初始化。

Class 0

指定此類型為類別。

ClassSemanticsMask 32

指定類別語意 (Semantics) 資訊;目前的類別為依照上下文而定的 (否則為變動的)。

CustomFormatClass 196608

LPSTR 由部分實作特定的方式進行解譯,這可能會擲回 NotSupportedException。 不適用於Microsoft實作.NET Framework。

CustomFormatMask 12582912

用於擷取機器碼互通性的非標準編碼資訊。 未指定這些 2 位元值的含義。 不適用於Microsoft實作.NET Framework。

ExplicitLayout 16

指定類別欄位配置於指定位移 (Offset)。

HasSecurity 262144

類型具有關聯的安全性。

Import 4096

指定類別或介面從其他的模組匯入。

Interface 32

指定此類型為介面。

LayoutMask 24

指定類別配置資訊。

NestedAssembly 5

指定類別是使用組件 (Assembly) 可視性所產生的巢狀,因此只能藉由組件中的方法存取。

NestedFamANDAssem 6

指定類別是使用組件和家族可視性所產生的巢狀,因此只能藉由在家族和組件交集中的方法存取。

NestedFamily 4

指定類別是使用家族可視性所產生的巢狀,因此只能藉由其類型和任何衍生類型中的方法存取。

NestedFamORAssem 7

指定類別是使用家族或組件可視性所產生的巢狀,因此只能藉由在家族和組件聯集中的方法存取。

NestedPrivate 3

指定類別是使用私用 (Private) 可視性所產生的巢狀。

NestedPublic 2

指定類別是使用公用 (Public) 可視性所產生的巢狀。

NotPublic 0

指定類別不是公用。

Public 1

指定類別是公用。

ReservedMask 264192

保留供執行階段使用的屬性。

RTSpecialName 2048

執行階段應該檢查名稱編碼方式。

Sealed 256

指定類別為固定的,並且無法擴充。

SequentialLayout 8

指定類別欄位會循序配置,依照欄位發出至中繼資料 (Metadata) 的順序。

Serializable 8192

指定類別可以序列化。

SpecialName 1024

指定類別在名稱所表示的方法中為特殊的。

StringFormatMask 196608

用來擷取機器碼互通性 (Interoperability) 的字串資訊。

UnicodeClass 65536

LPTSTR 被解譯為 UNICODE。

VisibilityMask 7

指定類型可視性資訊。

WindowsRuntime 16384

指定Windows 執行階段類型。

範例

下列範例會 AttributesType 取代表不同類型之物件的 屬性值,然後判斷是否已設定個別屬性旗標。

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

備註

列舉的 TypeAttributes 一些成員是代表一組互斥屬性的遮罩。 例如,成員 VisibilityMask 包含 NotPublicPublicNestedPublicNestedPrivateNestedFamilyNestedAssembly 、、 NestedFamANDAssemNestedFamORAssem 成員。 由於每個屬性集都包含基礎值為零的成員,因此您應該先 And 使用從 之類的 Type.Attributes 屬性擷取的特定 System.Reflection.TypeAttributes 值遮罩值。 下表列出遮罩及其包含的個別成員:

Mask Includes
VisibilityMask NotPublic
公用
NestedPublic
NestedPrivate
NestedFamily
NestedAssembly
NestedFamANDAssem
NestedFamORAssem
LayoutMask AutoLayout
SequentialLayout
ExplicitLayout
ClassSemanticsMask 類別
介面
StringFormatMask AnsiClass
UnicodeClass
AutoClass
CustomFormatClass
CustomFormatMask 沒有成員。

這個列舉值類別的成員符合 corhdr.h 檔案中所定義的 CorTypeAttr 列舉值。

適用於