TypeAttributes TypeAttributes TypeAttributes TypeAttributes Enum


指定类型属性。Specifies type attributes.

此枚举有一个 FlagsAttribute 属性,允许按位组合成员值。

public enum class TypeAttributes
public enum TypeAttributes
type TypeAttributes = 
Public Enum TypeAttributes


Abstract Abstract Abstract Abstract 128

指定该类型为抽象类型。Specifies that the type is abstract.

AnsiClass AnsiClass AnsiClass AnsiClass 0

LPTSTR 被解释为 ANSI。LPTSTR is interpreted as ANSI.

AutoClass AutoClass AutoClass AutoClass 131072

LPTSTR 自动被解释。LPTSTR is interpreted automatically.

AutoLayout AutoLayout AutoLayout AutoLayout 0

指定类字段由公共语言运行时自动布局。Specifies that class fields are automatically laid out by the common language runtime.

BeforeFieldInit BeforeFieldInit BeforeFieldInit BeforeFieldInit 1048576

指定调用此类型的静态方法并不强制系统初始化此类型。Specifies that calling static methods of the type does not force the system to initialize the type.

Class Class Class Class 0

指定该类型为一个类。Specifies that the type is a class.

ClassSemanticsMask ClassSemanticsMask ClassSemanticsMask ClassSemanticsMask 32

指定类语义信息;当前类与上下文相关(否则是灵活的)。Specifies class semantics information; the current class is contextful (else agile).

CustomFormatClass CustomFormatClass CustomFormatClass 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 CustomFormatMask CustomFormatMask 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 ExplicitLayout ExplicitLayout ExplicitLayout 16

指定类字段按指定的偏移量布局。Specifies that class fields are laid out at the specified offsets.

HasSecurity HasSecurity HasSecurity HasSecurity 262144

类型具有与之关联的安全性。Type has security associate with it.

Import Import Import Import 4096

指定此类或接口从另一个模块导入。Specifies that the class or interface is imported from another module.

Interface Interface Interface Interface 32

指定该类型为一个接口。Specifies that the type is an interface.

LayoutMask LayoutMask LayoutMask LayoutMask 24

指定类布局信息。Specifies class layout information.

NestedAssembly NestedAssembly NestedAssembly NestedAssembly 5

指定此类是用程序集可见性嵌套的,因此只能由其程序集内的方法访问。Specifies that the class is nested with assembly visibility, and is thus accessible only by methods within its assembly.

NestedFamANDAssem NestedFamANDAssem NestedFamANDAssem 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 NestedFamily NestedFamily 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 NestedFamORAssem NestedFamORAssem 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 NestedPrivate NestedPrivate NestedPrivate 3

指定此类是用私有可见性嵌套的。Specifies that the class is nested with private visibility.

NestedPublic NestedPublic NestedPublic NestedPublic 2

指定此类是用公共可见性嵌套的。Specifies that the class is nested with public visibility.

NotPublic NotPublic NotPublic NotPublic 0

指定此类不是公共的。Specifies that the class is not public.

Public Public Public Public 1

指定此类是公共的。Specifies that the class is public.

ReservedMask ReservedMask ReservedMask ReservedMask 264192

保留供运行时使用的属性。Attributes reserved for runtime use.

RTSpecialName RTSpecialName RTSpecialName RTSpecialName 2048

运行时应检查名称编码。Runtime should check name encoding.

Sealed Sealed Sealed Sealed 256

指定此类是具体的,无法扩展。Specifies that the class is concrete and cannot be extended.

SequentialLayout SequentialLayout SequentialLayout SequentialLayout 8

指定类字段按字段发出到元数据的顺序依次布局。Specifies that class fields are laid out sequentially, in the order that the fields were emitted to the metadata.

Serializable Serializable Serializable Serializable 8192

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

SpecialName SpecialName SpecialName SpecialName 1024

指定此类特殊,具体由名称表示。Specifies that the class is special in a way denoted by the name.

StringFormatMask StringFormatMask StringFormatMask StringFormatMask 196608

用于检索本机互操作性的字符串信息。Used to retrieve string information for native interoperability.

UnicodeClass UnicodeClass UnicodeClass UnicodeClass 65536

LPTSTR 被解释为 UNICODE。LPTSTR is interpreted as UNICODE.

VisibilityMask VisibilityMask VisibilityMask VisibilityMask 7

指定类型可见性信息。Specifies type visibility information.

WindowsRuntime WindowsRuntime WindowsRuntime WindowsRuntime 16384

指定 Windows 运行时Windows Runtime 类型。Specifies a Windows 运行时Windows Runtime type.


下面的示例检索表示多种不同类型AttributesType对象的属性值, 然后确定是否已设置了各个特性标志。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");
               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" +
                      "\n         (cannot be declared in C#)");
               case TypeAttributes.NestedAssembly:
                   Console.WriteLine("   ...is nested and internal");
               case TypeAttributes.NestedFamily:
                   Console.WriteLine("   ...is nested and protected");
               case TypeAttributes.NestedFamORAssem:
                   Console.WriteLine("   ...is nested and protected internal");

           // Use the layout mask to test for layout attributes.
           TypeAttributes layout = attr & TypeAttributes.LayoutMask;
           switch (layout)
               case TypeAttributes.AutoLayout:
                   Console.WriteLine("   ...is AutoLayout");
               case TypeAttributes.SequentialLayout:
                   Console.WriteLine("   ...is SequentialLayout");
               case TypeAttributes.ExplicitLayout:
                   Console.WriteLine("   ...is ExplicitLayout");

           // 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");
                       Console.WriteLine("   ...is a class");
               case TypeAttributes.Interface:
                   Console.WriteLine("   ...is an interface");

           if ((attr & TypeAttributes.Abstract) != 0)
               Console.WriteLine("   ...is abstract");

           if ((attr & TypeAttributes.Sealed) != 0)
               Console.WriteLine("   ...is sealed");
// 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")
                       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")
    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 , 成员包括NestedFamANDAssemPublicNestedPublic、 、、NestedFamily、和NestedFamORAssem成员。 NestedPrivate NotPublic NestedAssemblyFor 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:

掩码Mask 包括Includes
VisibilityMaskVisibilityMask NotPublicNotPublic
LayoutMaskLayoutMask 自动AutoLayout
ClassSemanticsMaskClassSemanticsMask Class
StringFormatMaskStringFormatMask AnsiClassAnsiClass
CustomFormatMaskCustomFormatMask 无成员。No members.

此枚举器类的成员与 corhdr.h 文件中定义的 CorTypeAttr 枚举器匹配。The members of this enumerator class match the CorTypeAttr enumerator as defined in the corhdr.h file.