TypeAttributes Enumeración

Definición

Especifica los atributos de tipo.

Esta enumeración admite una combinación bit a bit de sus valores de miembro.

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
Herencia
TypeAttributes
Atributos

Campos

Abstract 128

Especifica que el tipo es abstracto.

AnsiClass 0

LPTSTR se interpreta como ANSI.

AutoClass 131072

LPTSTR se interpreta automáticamente.

AutoLayout 0

Especifica que Common Language Runtime distribuye automáticamente los campos de la clase.

BeforeFieldInit 1048576

Especifica que la llamada a métodos estáticos del tipo no obliga al sistema a inicializar dicho tipo.

Class 0

Especifica que el tipo es una clase.

ClassSemanticsMask 32

Especifica la información semántica de la clase; la clase actual es contextual (o bien, ágil).

CustomFormatClass 196608

LPSTR se interpreta mediante recursos específicos de la implementación, lo que podría iniciar una excepción NotSupportedException. No se usa en la implementación de Microsoft de la .NET Framework.

CustomFormatMask 12582912

Se utiliza para recuperar información de la codificación no estándar y obtener la interoperabilidad nativa. El significado de los valores de estos 2 bits no se especifica. No se usa en la implementación de Microsoft de la .NET Framework.

ExplicitLayout 16

Especifica que los campos de la clase se distribuyen con los desplazamientos indicados.

HasSecurity 262144

Type tiene características de seguridad asociadas.

Import 4096

Especifica que la clase o interfaz se importó de otro módulo.

Interface 32

Especifica que el tipo es una interfaz.

LayoutMask 24

Especifica la información de diseño de la clase.

NestedAssembly 5

Especifica que la clase se anida con visibilidad de ensamblado y, por lo tanto, solo los métodos de su ensamblado tienen acceso a ella.

NestedFamANDAssem 6

Especifica que la clase se anida con visibilidad de ensamblado y familia y, por lo tanto, solo los métodos que están en la intersección de su familia y ensamblado tienen acceso a ella.

NestedFamily 4

Especifica que la clase se anida con visibilidad de familia y, por lo tanto, solo los métodos de su propio tipo y tipos derivados tienen acceso a ella.

NestedFamORAssem 7

Especifica que la clase se anida con visibilidad de ensamblado o familia y, por lo tanto, solo los métodos que están en la unión de su familia y ensamblado tienen acceso a ella.

NestedPrivate 3

Especifica que la clase se anida con visibilidad privada.

NestedPublic 2

Especifica que la clase se anida con visibilidad pública.

NotPublic 0

Especifica que la clase no es pública.

Public 1

Especifica que la clase es pública.

ReservedMask 264192

Atributos reservados para su uso en tiempo de ejecución.

RTSpecialName 2048

Common Language Runtime debe comprobar la codificación de nombres.

Sealed 256

Especifica que la clase es concreta y no se puede extender.

SequentialLayout 8

Especifica que los campos de la clase se distribuyen secuencialmente, en el orden en que se emitieron a los metadatos.

Serializable 8192

Especifica que la clase se puede serializar.

SpecialName 1024

Especifica que la clase es especial en la forma que describe el nombre.

StringFormatMask 196608

Se utiliza para recuperar información de cadena para la interoperabilidad nativa.

UnicodeClass 65536

LPTSTR se interpreta como UNICODE.

VisibilityMask 7

Especifica la información sobre la visibilidad del tipo.

WindowsRuntime 16384

Especifica un tipo de Windows Runtime.

Ejemplos

En el ejemplo siguiente se recupera el valor de la Attributes propiedad para Type los objetos que representan una serie de tipos diferentes y, a continuación, se determina si se han establecido marcas de atributo individuales.

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

Comentarios

Algunos de los miembros de la TypeAttributes enumeración son máscaras que representan un conjunto de atributos mutuamente excluyentes. Por ejemplo, el VisibilityMask miembro incluye los NotPublicmiembros , Public, NestedPrivate``NestedPublic``NestedAssembly``NestedFamily, NestedFamANDAssemy .NestedFamORAssem Dado que cada conjunto de atributos incluye un miembro cuyo valor subyacente es cero, primero And debe tener el valor de la máscara con el valor específico System.Reflection.TypeAttributes recuperado de una propiedad como Type.Attributes. En la tabla siguiente se enumeran las máscaras y los miembros individuales que incluyen:

Máscara Includes
VisibilityMask NotPublic
Público
NestedPublic
NestedPrivate
NestedFamily
NestedAssembly
NestedFamANDAssem
NestedFamORAssem
LayoutMask Autolayout
SequentialLayout
ExplicitLayout
ClassSemanticsMask Clase
Interfaz
StringFormatMask AnsiClass
UnicodeClass
Autoclase
CustomFormatClass
CustomFormatMask Ningún miembro.

Los miembros de esta clase de enumerador coinciden con el enumerador CorTypeAttr tal y como se define en el archivo corhdr.h.

Se aplica a