Поделиться через


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
Атрибуты

Поля

Имя Значение Описание
AnsiClass 0

LPTSTR интерпретируется как ANSI.

AutoLayout 0

Указывает, что поля классов автоматически выкладываются средой CLR.

Class 0

Указывает, что тип является классом.

NotPublic 0

Указывает, что класс не является общедоступным.

Public 1

Указывает, что класс является общедоступным.

NestedPublic 2

Указывает, что класс вложен с общедоступной видимостью.

NestedPrivate 3

Указывает, что класс вложен с частной видимостью.

NestedFamily 4

Указывает, что класс вложен с видимостью семейства и таким образом доступен только методами в пределах собственного типа и любых производных типов.

NestedAssembly 5

Указывает, что класс вложен в видимость сборки и, таким образом, доступен только методами в своей сборке.

NestedFamANDAssem 6

Указывает, что класс вложен с видимостью сборки и семейства, поэтому он доступен только методами, расположенными в пересечении его семейства и сборки.

NestedFamORAssem 7

Указывает, что класс вложен с видимостью семейства или сборки и, таким образом, доступен только методами, расположенными в союзе своей семьи и сборки.

VisibilityMask 7

Указывает сведения о видимости типов.

SequentialLayout 8

Указывает, что поля класса выкладываются последовательно, в том порядке, в котором поля были созданы метаданным.

ExplicitLayout 16

Указывает, что поля класса размещаются по указанным смещениям.

ExtendedLayout 24
LayoutMask 24

Указывает сведения о макете класса.

ClassSemanticsMask 32

Задает сведения о семантике класса; Текущий класс является контекстным (иначе гибким).

Interface 32

Указывает, что тип является интерфейсом.

Abstract 128

Указывает, что тип является абстрактным.

Sealed 256

Указывает, что класс является конкретным и не может быть расширен.

SpecialName 1024

Указывает, что класс является особым образом, обозначаемым именем.

RTSpecialName 2048

Среда выполнения должна проверять кодировку имен.

Import 4096

Указывает, что класс или интерфейс импортируются из другого модуля.

Serializable 8192

Указывает, что класс можно сериализовать.

WindowsRuntime 16384

Указывает тип среды выполнения Windows.

UnicodeClass 65536

LPTSTR интерпретируется как ЮНИКОД.

AutoClass 131072

LPTSTR интерпретируется автоматически.

CustomFormatClass 196608

LPSTR интерпретируется некоторыми средствами, зависящими от реализации, что включает в себя возможность бросания NotSupportedException. Не используется в реализации Платформы .NET Framework майкрософт.

StringFormatMask 196608

Используется для получения строковых сведений для собственного взаимодействия.

HasSecurity 262144

Тип имеет связь безопасности с ним.

ReservedMask 264192

Атрибуты, зарезервированные для использования среды выполнения.

BeforeFieldInit 1048576

Указывает, что вызов статических методов типа не заставляет систему инициализировать тип.

CustomFormatMask 12582912

Используется для получения нестандартной информации о кодировке для собственного взаимодействия. Значение этих 2 битов не указано. Не используется в реализации Платформы .NET Framework майкрософт.

Примеры

В следующем примере извлекается значение 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, NestedPrivateNestedFamilyNestedPublic, NestedAssemblyNestedFamANDAssemи NestedFamORAssem члены. Так как каждый набор атрибутов включает в себя элемент, базовое значение которого равно нулю, сначала And следует задать значение маски с определенным System.Reflection.TypeAttributes значением, полученным из свойства, Type.Attributesнапример. В следующей таблице перечислены маски и отдельные члены, которые они включают:

Mask Includes
ВидимостьMask NotPublic
Общественного
NestedPublic
NestedPrivate
NestedFamily
NestedAssembly
NestedFamANDAssem
NestedFamORAssem
LayoutMask Автокомпоновка
SequentialLayout
ExplicitLayout
ClassSemanticsMask Класс
Интерфейс
StringFormatMask AnsiClass
ЮникодКласс
Автокласс
CustomFormatClass
CustomFormatMask Нет членов.

Члены этого класса перечислителя соответствуют перечислителю CorTypeAttr, как определено в файле corhdr.h.

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