TypeAttributes 枚举

定义

指定类型属性。

此枚举支持其成员值的按位组合。

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

指定类字段由公共语言运行时自动布局。

BeforeFieldInit 1048576

指定调用此类型的静态方法并不强制系统初始化此类型。

Class 0

指定该类型为一个类。

ClassSemanticsMask 32

指定类语义信息;当前类与上下文相关(否则是灵活的)。

CustomFormatClass 196608

LPSTR 由一些特定于实现的方式解释,这些方式有可能引发 NotSupportedException。 未在 Microsoft 实现.NET Framework中使用。

CustomFormatMask 12582912

用于检索本机互操作的非标准编码信息。 未指定这些 2 位值的含义。 未在 Microsoft 实现.NET Framework中使用。

ExplicitLayout 16

指定类字段按指定的偏移量布局。

HasSecurity 262144

类型具有与之关联的安全性。

Import 4096

指定此类或接口从另一个模块导入。

Interface 32

指定该类型为一个接口。

LayoutMask 24

指定类布局信息。

NestedAssembly 5

指定此类是用程序集可见性嵌套的,因此只能由其程序集内的方法访问。

NestedFamANDAssem 6

指定此类是用程序集和族可见性嵌套的,因此只能由其族和程序集的交集中的方法访问。

NestedFamily 4

指定此类是用族可见性嵌套的,因此只能由它自己的类型和任何派生类型中的方法访问。

NestedFamORAssem 7

指定此类是用族或程序集可见性嵌套的,因此只能由其族和程序集的并集中的方法访问。

NestedPrivate 3

指定此类是用私有可见性嵌套的。

NestedPublic 2

指定此类是用公共可见性嵌套的。

NotPublic 0

指定此类不是公共的。

Public 1

指定此类是公共的。

ReservedMask 264192

保留供运行时使用的属性。

RTSpecialName 2048

运行时应检查名称编码。

Sealed 256

指定此类是具体的,无法扩展。

SequentialLayout 8

指定类字段按字段发出到元数据的顺序依次布局。

Serializable 8192

指定此类可以序列化。

SpecialName 1024

指定此类特殊,具体由名称表示。

StringFormatMask 196608

用于检索本机互操作性的字符串信息。

UnicodeClass 65536

LPTSTR 被解释为 UNICODE。

VisibilityMask 7

指定类型可见性信息。

WindowsRuntime 16384

指定Windows 运行时类型。

示例

以下示例检索 Attributes 表示多种不同类型的对象的属性值 Type ,然后确定是否已设置单个属性标志。

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包括 NotPublicPublicNestedPublicNestedPrivateNestedFamily``NestedAssemblyNestedFamANDAssemNestedFamORAssem成员。 由于每个属性集都包含一个基础值为零的成员,因此应首先And使用从属性(例如Type.Attributes)检索到的特定System.Reflection.TypeAttributes值的掩码的值。 下表列出了掩码及其包含的各个成员:

Mask 包括
VisibilityMask NotPublic
公用
NestedPublic
NestedPrivate
NestedFamily
NestedAssembly
NestedFamANDAssem
NestedFamORAssem
LayoutMask AutoLayout
SequentialLayout
ExplicitLayout
ClassSemanticsMask
接口
StringFormatMask AnsiClass
UnicodeClass
AutoClass
CustomFormatClass
CustomFormatMask 无成员。

此枚举器类的成员与 corhdr.h 文件中定义的 CorTypeAttr 枚举器匹配。

适用于