TypeAttributes 枚举 
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
指定类型属性。
此枚举支持其成员值的按位组合。
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- 继承
- 属性
字段
| 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包括 NotPublic、Public、NestedPublic、NestedPrivate、NestedFamily``NestedAssembly、 NestedFamANDAssem和NestedFamORAssem成员。 由于每个属性集都包含一个基础值为零的成员,因此应首先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 枚举器匹配。