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
- Наследование
- Атрибуты
Поля
| Имя | Значение | Описание |
|---|---|---|
| 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.