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


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. Не используется в реализации Майкрософт платформа .NET Framework.

CustomFormatMask 12582912

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

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

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

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