TypeAttributes Énumération
Définition
Important
Certaines informations portent sur la préversion du produit qui est susceptible d’être en grande partie modifiée avant sa publication. Microsoft exclut toute garantie, expresse ou implicite, concernant les informations fournies ici.
Spécifie les attributs de type.
Cette énumération prend en charge une combinaison au niveau du bit de ses valeurs membres.
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
- Héritage
- Attributs
Champs
Abstract | 128 | Spécifie que le type est abstrait. |
AnsiClass | 0 | LPTSTR est interprété comme ANSI. |
AutoClass | 131072 | LPTSTR est interprété automatiquement. |
AutoLayout | 0 | Spécifie que le Common Language Runtime dispose automatiquement les champs de la classe. |
BeforeFieldInit | 1048576 | Spécifie que l'appel à des méthodes statiques du type ne force pas le système à initialiser le type. |
Class | 0 | Spécifie que le type est une classe. |
ClassSemanticsMask | 32 | Spécifie des informations de sémantiques se rapportant à la classe ; la classe actuelle est liée au contexte (dans le cas contraire, agile). |
CustomFormatClass | 196608 | LPSTR est interprété par des moyens spécifiques à l'implémentation, notamment la possibilité de lever NotSupportedException. Non utilisé dans l’implémentation Microsoft de l'.NET Framework. |
CustomFormatMask | 12582912 | Utilisé pour récupérer des informations d'encodage non standard pour une interopérabilité native. La signification des valeurs de ces 2 bits n'est pas spécifiée. Non utilisé dans l’implémentation Microsoft de l'.NET Framework. |
ExplicitLayout | 16 | Spécifie que les champs de la classe sont placés aux offsets spécifiés. |
HasSecurity | 262144 | La sécurité est associée au type. |
Import | 4096 | Spécifie que la classe ou l'interface est importée à partir d'un autre module. |
Interface | 32 | Spécifie que le type est une interface. |
LayoutMask | 24 | Spécifie des informations relatives à la disposition de la classe. |
NestedAssembly | 5 | Spécifie que la classe est imbriquée et qu'elle a une visibilité de niveau assembly. Par conséquent, elle est uniquement accessible aux méthodes contenues dans son assembly. |
NestedFamANDAssem | 6 | Spécifie que la classe est imbriquée et qu'elle a une visibilité de niveau assembly et family. Par conséquent, elle est uniquement accessible aux méthodes se trouvant à l'intersection entre sa famille et son assembly. |
NestedFamily | 4 | Spécifie que la classe est imbriquée et qu'elle a une visibilité de niveau family. Par conséquent, elle est uniquement accessible aux méthodes contenues dans son propre type et dans ses types dérivés, le cas échéant. |
NestedFamORAssem | 7 | Spécifie que la classe est imbriquée et qu'elle a une visibilité de niveau assembly ou family. Par conséquent, elle est uniquement accessible aux méthodes comprises dans l'union de sa famille et de son assembly. |
NestedPrivate | 3 | Spécifie que la classe est imbriquée et qu'elle a une visibilité privée. |
NestedPublic | 2 | Spécifie que la classe est imbriquée et qu'elle a une visibilité publique. |
NotPublic | 0 | Spécifie que la classe n'est pas publique. |
Public | 1 | Spécifie que la classe est publique. |
ReservedMask | 264192 | Attributs réservés pour une utilisation au moment de l'exécution. |
RTSpecialName | 2048 | Le runtime doit vérifier l'encodage des noms. |
Sealed | 256 | Spécifie que la classe est concrète et qu'elle ne peut pas être étendue. |
SequentialLayout | 8 | Spécifie que les champs de la classe sont placés séquentiellement, en respectant l'ordre dans lequel ils ont été émis aux métadonnées. |
Serializable | 8192 | Spécifie que la classe peut être sérialisée. |
SpecialName | 1024 | Spécifie qu'il s'agit d'une classe spéciale, tel qu'indiqué par son nom. |
StringFormatMask | 196608 | Utilisé pour récupérer des informations de chaîne pour une interopérabilité native. |
UnicodeClass | 65536 | LPTSTR est interprété comme UNICODE. |
VisibilityMask | 7 | Spécifie des informations sur la visibilité du type. |
WindowsRuntime | 16384 | Spécifie un type Windows Runtime. |
Exemples
L’exemple suivant récupère la valeur de la Attributes propriété pour Type les objets qui représentent un certain nombre de types différents, puis détermine si des indicateurs d’attribut individuels ont été définis.
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
Remarques
Certains des membres de l’énumération TypeAttributes
sont des masques qui représentent un ensemble d’attributs mutuellement exclusifs. Par exemple, le VisibilityMask
membre inclut les NotPublic
membres , , , NestedFamily``NestedPrivate``NestedPublic``NestedAssembly``Public
, , et NestedFamANDAssem``NestedFamORAssem
les membres. Étant donné que chaque jeu d’attributs inclut un membre dont la valeur sous-jacente est zéro, vous devez d’abord And
la valeur du masque avec la valeur spécifique System.Reflection.TypeAttributes récupérée à partir d’une propriété telle que Type.Attributes. Le tableau suivant répertorie les masques et les membres individuels qu’ils incluent :
Mask | Includes |
---|---|
VisibilityMask | NotPublic Public NestedPublic NestedPrivate NestedFamily NestedAssembly NestedFamANDAssem NestedFamORAssem |
LayoutMask | Superposition automatique SéquentielLayout ExplicitLayout |
ClassSemanticsMask | Classe Interface |
StringFormatMask | AnsiClass UnicodeClass Classe automatique CustomFormatClass |
CustomFormatMask | Aucun membre. |
Les membres de cette classe d’énumérateur correspondent à l’énumérateur CorTypeAttr tel que défini dans le fichier corhdr.h.