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
- Наследование
- Атрибуты
Поля
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
, NestedPrivate
NestedFamily
, 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.