Condividi tramite


TypeAttributes Enumerazione

Definizione

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à
TypeAttributes
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 NotPublicmembri , Public, NestedPublic, NestedFamilyNestedPrivate, 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.

Si applica a