Compartir por


TypeAttributes Enumeración

Definición

Especifica 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

Nombre Valor Description
AnsiClass 0

LPTSTR se interpreta como ANSI.

AutoLayout 0

Especifica que Common Language Runtime diseña automáticamente los campos de clase.

Class 0

Especifica que el tipo es una clase.

NotPublic 0

Especifica que la clase no es pública.

Public 1

Especifica que la clase es pública.

NestedPublic 2

Especifica que la clase está anidada con visibilidad pública.

NestedPrivate 3

Especifica que la clase está anidada con visibilidad privada.

NestedFamily 4

Especifica que la clase está anidada con visibilidad de familia y, por tanto, solo es accesible por métodos dentro de su propio tipo y cualquier tipo derivado.

NestedAssembly 5

Especifica que la clase está anidada con visibilidad de ensamblado y, por tanto, solo es accesible por métodos dentro de su ensamblado.

NestedFamANDAssem 6

Especifica que la clase está anidada con visibilidad de ensamblado y familia y, por tanto, solo es accesible por métodos que se encuentra en la intersección de su familia y ensamblado.

NestedFamORAssem 7

Especifica que la clase está anidada con visibilidad de familia o ensamblado y, por tanto, solo es accesible mediante métodos que se colocan en la unión de su familia y ensamblado.

VisibilityMask 7

Especifica información de visibilidad de tipos.

SequentialLayout 8

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

ExplicitLayout 16

Especifica que los campos de clase se colocan en los desplazamientos especificados.

ExtendedLayout 24
LayoutMask 24

Especifica información de diseño de clase.

ClassSemanticsMask 32

Especifica información semántica de clases; la clase actual es contextual (más ágil).

Interface 32

Especifica que el tipo es una interfaz.

Abstract 128

Especifica que el tipo es abstracto.

Sealed 256

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

SpecialName 1024

Especifica que la clase es especial de una manera indicada por el nombre.

RTSpecialName 2048

El tiempo de ejecución debe comprobar la codificación de nombres.

Import 4096

Especifica que la clase o interfaz se importa desde otro módulo.

Serializable 8192

Especifica que la clase se puede serializar.

WindowsRuntime 16384

Especifica un tipo de Windows Runtime.

UnicodeClass 65536

LPTSTR se interpreta como UNICODE.

AutoClass 131072

LPTSTR se interpreta automáticamente.

CustomFormatClass 196608

LPSTR se interpreta mediante algunos medios específicos de la implementación, lo que incluye la posibilidad de iniciar un NotSupportedException. No se usa en la implementación de Microsoft de .NET Framework.

StringFormatMask 196608

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

HasSecurity 262144

El tipo tiene asociado de seguridad.

ReservedMask 264192

Atributos reservados para uso en tiempo de ejecución.

BeforeFieldInit 1048576

Especifica que llamar a métodos estáticos del tipo no obliga al sistema a inicializar el tipo.

CustomFormatMask 12582912

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

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, NestedPrivateNestedPublicNestedAssemblyNestedFamily, , NestedFamANDAssemy .NestedFamORAssem Dado que cada conjunto de atributos incluye un miembro cuyo valor subyacente es cero, debe primero And 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
SecuencialLayout
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 como se define en el archivo corhdr.h.

Se aplica a