TypeAttributes Enumerazione
Definizione
Importante
Alcune informazioni sono relative alla release non definitiva del prodotto, che potrebbe subire modifiche significative prima della release definitiva. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
Specifica gli attributi di tipo.
Questa enumerazione supporta una combinazione bit per bit dei rispettivi valori dei membri.
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
- Ereditarietà
- Attributi
Campi
Abstract | 128 | Specifica che il tipo è astratto. |
AnsiClass | 0 | LPTSTR è interpretato come ANSI. |
AutoClass | 131072 | LPTSTR è interpretato automaticamente. |
AutoLayout | 0 | Specifica che i campi della classe sono posizionati automaticamente da Common Language Runtime. |
BeforeFieldInit | 1048576 | Specifica che la chiamata a metodi statici del tipo non forza l'inizializzazione del tipo da parte del sistema. |
Class | 0 | Specifica che il tipo è una classe. |
ClassSemanticsMask | 32 | Specifica le informazioni relative alla semantica della classe; la classe corrente è ricca di contesti (ovvero agile). |
CustomFormatClass | 196608 | LPSTR viene interpretato da alcuni mezzi specifici dell'implementazione; ciò include la possibilità di generare un'eccezione NotSupportedException. Non usato nell'implementazione Microsoft di .NET Framework. |
CustomFormatMask | 12582912 | Usato per recuperare informazioni di codifica non standard per l'interoperabilità nativa. Il significato dei valori di questi 2 bit non è specificato. Non usato nell'implementazione Microsoft di .NET Framework. |
ExplicitLayout | 16 | Specifica che i campi della classe sono posizionati in corrispondenza degli offset specificati. |
HasSecurity | 262144 | Il tipo dispone di sicurezza associata. |
Import | 4096 | Specifica che la classe o l'interfaccia viene importata da un altro modulo. |
Interface | 32 | Specifica che il tipo è un'interfaccia. |
LayoutMask | 24 | Specifica le informazioni di layout della classe. |
NestedAssembly | 5 | Specifica che la classe è annidata e visibile soltanto all'interno dell'assembly, pertanto accessibile solo dai metodi all'interno del corrispondente assembly. |
NestedFamANDAssem | 6 | Specifica che la classe è annidata e visibile soltanto all'interno dell'assembly e della famiglia, pertanto accessibile solo dai metodi all'interno dell'intersezione tra l'assembly e la famiglia. |
NestedFamily | 4 | Specifica che la classe è annidata e visibile a livello di famiglia, pertanto accessibile solo dai metodi all'interno del proprio tipo e degli eventuali tipi derivati. |
NestedFamORAssem | 7 | Specifica che la classe è annidata e visibile soltanto all'interno dell'assembly o della famiglia, pertanto accessibile solo dai metodi all'interno dell'unione tra l'assembly e la famiglia. |
NestedPrivate | 3 | Specifica che la classe è annidata e con visibilità privata. |
NestedPublic | 2 | Specifica che la classe è annidata e con visibilità pubblica. |
NotPublic | 0 | Specifica che la classe non è pubblica. |
Public | 1 | Specifica che la classe è pubblica. |
ReservedMask | 264192 | Attributi riservati per l'utilizzo di runtime. |
RTSpecialName | 2048 | Il runtime deve controllare la codifica dei nomi. |
Sealed | 256 | Specifica che la classe è concreta e non può essere estesa. |
SequentialLayout | 8 | Specifica che i campi della classe sono posizionati in modo sequenziale, nell'ordine in cui sono stati emessi ai metadati. |
Serializable | 8192 | Specifica che è possibile serializzare la classe. |
SpecialName | 1024 | Specifica che si tratta di una classe speciale nel modo descritto dal nome. |
StringFormatMask | 196608 | Usato per recuperare informazioni di stringa per l'interoperabilità nativa. |
UnicodeClass | 65536 | LPTSTR è interpretato come UNICODE. |
VisibilityMask | 7 | Specifica le informazioni di visibilità del tipo. |
WindowsRuntime | 16384 | Specifica un tipo di Windows Runtime. |
Esempio
Nell'esempio Attributes seguente viene recuperato il valore della proprietà per Type gli oggetti che rappresentano un numero di tipi diversi e quindi determina se sono stati impostati singoli flag di attributo.
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
Commenti
Alcuni membri dell'enumerazione TypeAttributes
sono maschere che rappresentano un set di attributi che si escludono a vicenda. Ad esempio, il VisibilityMask
membro include i NotPublic
membri , Public
, NestedPublic
, NestedFamily
NestedPrivate
, NestedAssembly
, NestedFamANDAssem
, e NestedFamORAssem
. Poiché ogni set di attributi include un membro il cui valore sottostante è zero, è necessario innanzitutto And
il valore della maschera con il valore specifico System.Reflection.TypeAttributes recuperato da una proprietà, Type.Attributesad esempio . La tabella seguente elenca le maschere e i singoli membri che includono:
Mask | Includes |
---|---|
VisibilitàMask | NotPublic Pubblico NestedPublic NestedPrivate NestedFamily NestedAssembly NestedFamANDAssem NestedFamORAssem |
LayoutMask | Autolayout SequentialLayout ExplicitLayout |
ClassSemanticsMask | Classe Interfaccia |
StringFormatMask | AnsiClass UnicodeClass AutoClass CustomFormatClass |
CustomFormatMask | Nessun membro. |
I membri di questa classe enumeratore corrispondono all'enumeratore CorTypeAttr come definito nel file corhdr.h.