TypeAttributes 列舉

定義

指定類型屬性 (Attribute)。Specifies type attributes.

此列舉有 FlagsAttribute 屬性,因此其成員值可進行位元組合。

public enum class TypeAttributes
public enum 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
type 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

指定此類型為抽象。Specifies that the type is abstract.

AnsiClass 0

LPTSTR 被解譯為 ANSI。LPTSTR is interpreted as ANSI.

AutoClass 131072

LPTSTR 會自動被解譯。LPTSTR is interpreted automatically.

AutoLayout 0

指定類別欄位會由 Common Language Runtime 自動配置。Specifies that class fields are automatically laid out by the common language runtime.

BeforeFieldInit 1048576

指定呼叫類型的靜態 (Static) 方法時不要強制系統將類型初始化。Specifies that calling static methods of the type does not force the system to initialize the type.

Class 0

指定此類型為類別。Specifies that the type is a class.

ClassSemanticsMask 32

指定類別語意 (Semantics) 資訊;目前的類別為依照上下文而定的 (否則為變動的)。Specifies class semantics information; the current class is contextful (else agile).

CustomFormatClass 196608

LPSTR 由部分實作特定的方式進行解譯,這可能會擲回 NotSupportedExceptionLPSTR is interpreted by some implementation-specific means, which includes the possibility of throwing a NotSupportedException. 不會用於 Microsoft .NET Framework.NET Framework 實作中。Not used in the Microsoft implementation of the .NET Framework.NET Framework.

CustomFormatMask 12582912

用於擷取機器碼互通性的非標準編碼資訊。Used to retrieve non-standard encoding information for native interop. 未指定這些 2 位元值的含義。The meaning of the values of these 2 bits is unspecified. 不會用於 Microsoft .NET Framework.NET Framework 實作中。Not used in the Microsoft implementation of the .NET Framework.NET Framework.

ExplicitLayout 16

指定類別欄位配置於指定位移 (Offset)。Specifies that class fields are laid out at the specified offsets.

HasSecurity 262144

類型具有關聯的安全性。Type has security associate with it.

Import 4096

指定類別或介面從其他的模組匯入。Specifies that the class or interface is imported from another module.

Interface 32

指定此類型為介面。Specifies that the type is an interface.

LayoutMask 24

指定類別配置資訊。Specifies class layout information.

NestedAssembly 5

指定類別是使用組件 (Assembly) 可視性所產生的巢狀,因此只能藉由組件中的方法存取。Specifies that the class is nested with assembly visibility, and is thus accessible only by methods within its assembly.

NestedFamANDAssem 6

指定類別是使用組件和家族可視性所產生的巢狀,因此只能藉由在家族和組件交集中的方法存取。Specifies that the class is nested with assembly and family visibility, and is thus accessible only by methods lying in the intersection of its family and assembly.

NestedFamily 4

指定類別是使用家族可視性所產生的巢狀,因此只能藉由其類型和任何衍生類型中的方法存取。Specifies that the class is nested with family visibility, and is thus accessible only by methods within its own type and any derived types.

NestedFamORAssem 7

指定類別是使用家族或組件可視性所產生的巢狀,因此只能藉由在家族和組件聯集中的方法存取。Specifies that the class is nested with family or assembly visibility, and is thus accessible only by methods lying in the union of its family and assembly.

NestedPrivate 3

指定類別是使用私用 (Private) 可視性所產生的巢狀。Specifies that the class is nested with private visibility.

NestedPublic 2

指定類別是使用公用 (Public) 可視性所產生的巢狀。Specifies that the class is nested with public visibility.

NotPublic 0

指定類別不是公用。Specifies that the class is not public.

Public 1

指定類別是公用。Specifies that the class is public.

ReservedMask 264192

保留供執行階段使用的屬性。Attributes reserved for runtime use.

RTSpecialName 2048

執行階段應該檢查名稱編碼方式。Runtime should check name encoding.

Sealed 256

指定類別為固定的,並且無法擴充。Specifies that the class is concrete and cannot be extended.

SequentialLayout 8

指定類別欄位會循序配置,依照欄位發出至中繼資料 (Metadata) 的順序。Specifies that class fields are laid out sequentially, in the order that the fields were emitted to the metadata.

Serializable 8192

指定類別可以序列化。Specifies that the class can be serialized.

SpecialName 1024

指定類別在名稱所表示的方法中為特殊的。Specifies that the class is special in a way denoted by the name.

StringFormatMask 196608

用來擷取機器碼互通性 (Interoperability) 的字串資訊。Used to retrieve string information for native interoperability.

UnicodeClass 65536

LPTSTR 被解譯為 UNICODE。LPTSTR is interpreted as UNICODE.

VisibilityMask 7

指定類型可視性資訊。Specifies type visibility information.

WindowsRuntime 16384

指定 Windows 執行階段Windows Runtime 類型。Specifies a Windows 執行階段Windows Runtime type.

範例

下列範例會 Attributes 針對 Type 表示許多不同類型之物件的屬性值進行抓取,然後判斷是否已設定個別的屬性旗標。The following example retrieves the value of the Attributes property for Type objects that represent a number of different types, and then determines whether individual attribute flags have been set.

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 是代表一組互斥屬性的遮罩。Some of the members of the TypeAttributes enumeration are masks that represent a set of mutually exclusive attributes. 例如, VisibilityMask 成員包括、、、、、 NotPublic Public NestedPublic NestedPrivate NestedFamily NestedAssemblyNestedFamANDAssemNestedFamORAssem 成員。For example, the VisibilityMask member includes the NotPublic, Public, NestedPublic, NestedPrivate, NestedFamily, NestedAssembly, NestedFamANDAssem, and NestedFamORAssem members. 因為每個屬性集都包含其基礎值為零的成員,所以您應該先 And 使用從屬性抓取的特定 System.Reflection.TypeAttributes 值(例如)來處理遮罩的值 Type.AttributesBecause each attribute set includes a member whose underlying value is zero, you should first And the value of the mask with the specific System.Reflection.TypeAttributes value retrieved from a property such as Type.Attributes. 下表列出遮罩,以及它們所包含的個別成員:The following table lists the masks and the individual members that they include:

MaskMask IncludesIncludes
VisibilityMaskVisibilityMask NotPublicNotPublic
公用Public
NestedPublicNestedPublic
NestedPrivateNestedPrivate
NestedFamilyNestedFamily
NestedAssemblyNestedAssembly
NestedFamANDAssemNestedFamANDAssem
NestedFamORAssemNestedFamORAssem
LayoutMaskLayoutMask 佈局AutoLayout
SequentialLayoutSequentialLayout
ExplicitLayoutExplicitLayout
ClassSemanticsMaskClassSemanticsMask 類別Class
介面Interface
StringFormatMaskStringFormatMask AnsiClassAnsiClass
UnicodeClassUnicodeClass
AutoClassAutoClass
CustomFormatClassCustomFormatClass
CustomFormatMaskCustomFormatMask 沒有成員。No members.

此列舉值類別的成員符合 corhdr.h .h 檔案中定義的 CorTypeAttr 列舉值。The members of this enumerator class match the CorTypeAttr enumerator as defined in the corhdr.h file.

適用於