TypeAttributes 枚举

定义

指定类型属性。

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

C#
[System.Flags]
public enum TypeAttributes
C#
[System.Flags]
[System.Serializable]
public enum TypeAttributes
C#
[System.Flags]
[System.Serializable]
[System.Runtime.InteropServices.ComVisible(true)]
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 ,然后确定是否已设置单个属性标志。

C#
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

注解

枚举的某些 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 枚举器匹配。

适用于

产品 版本
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.6, 2.0, 2.1
UWP 10.0