TypeAttributes Перечисление

Определение

Задает атрибуты типа.Specifies type attributes.

Это перечисление имеет атрибут FlagsAttribute, который разрешает побитовое сочетание значений его элементов.

public enum class TypeAttributes
[System.Flags]
public enum TypeAttributes
[System.Flags]
[System.Serializable]
public enum TypeAttributes
[System.Flags]
[System.Runtime.InteropServices.ComVisible(true)]
[System.Serializable]
public enum TypeAttributes
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

Указывает, что поля класса автоматически распределяются общеязыковой средой выполнения.Specifies that class fields are automatically laid out by the common language runtime.

BeforeFieldInit 1048576

Указывает, что вызов статических методов типа не принуждает систему инициализировать тип.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

Определяет сведения о семантике класса; текущий класс зависит от контекста (в обратном случае он является гибким).Specifies class semantics information; the current class is contextful (else agile).

CustomFormatClass 196608

Тип LPSTR интерпретируется некоторыми средствами, включенными в конкретные реализации, что предоставляет возможность выдать исключение NotSupportedException.LPSTR is interpreted by some implementation-specific means, which includes the possibility of throwing a NotSupportedException. Не используется в реализации .NET Framework.NET Framework от Microsoft.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. Не используется в реализации .NET Framework.NET Framework от Microsoft.Not used in the Microsoft implementation of the .NET Framework.NET Framework.

ExplicitLayout 16

Указывает, что поля класса распределяются с заданными смещениями.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

Указывает, что данный класс является вложенным с областью видимости на уровне сборки и доступен только методам в пределах сборки.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

Указывает, что данный класс является вложенным с закрытой областью видимости.Specifies that the class is nested with private visibility.

NestedPublic 2

Указывает, что класс является вложенным с открытой областью видимости.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

Указывает, что поля класса распределены последовательно в порядке их передачи в метаданные.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

Используется для извлечения строковых данных для присущей данному объекту организации встроенного взаимодействия.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

Задает тип Среда выполнения WindowsWindows Runtime.Specifies a Среда выполнения WindowsWindows 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, NestedAssembly, NestedFamANDAssemи NestedFamORAssem.For example, the VisibilityMask member includes the NotPublic, Public, NestedPublic, NestedPrivate, NestedFamily, NestedAssembly, NestedFamANDAssem, and NestedFamORAssem members. Поскольку каждый набор атрибутов включает член, базовое значение которого равно нулю, необходимо сначала And значение маски с конкретным System.Reflection.TypeAttributes значением, полученным из свойства, например Type.Attributes.Because 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
висибилитимаскVisibilityMask нотпубликNotPublic
PublicPublic
нестедпубликNestedPublic
нестедприватеNestedPrivate
нестедфамилиNestedFamily
нестедассемблиNestedAssembly
нестедфамандассемNestedFamANDAssem
нестедфаморассемNestedFamORAssem
лайаутмаскLayoutMask AutoLayoutAutoLayout
секуентиаллайаутSequentialLayout
експлиЦитлайаутExplicitLayout
класссемантиксмаскClassSemanticsMask КлассClass
ИнтерфейсInterface
стрингформатмаскStringFormatMask ансиклассAnsiClass
уникодеклассUnicodeClass
АвтоклассAutoClass
кустомформатклассCustomFormatClass
кустомформатмаскCustomFormatMask Нет членов.No members.

Члены этого класса перечислителя соответствуют перечислителю Кортипеаттр, как определено в файле корхдр. h.The members of this enumerator class match the CorTypeAttr enumerator as defined in the corhdr.h file.

Применяется к