TypeAttributes Enumeración
Definición
Importante
Parte de la información hace referencia a la versión preliminar del producto, que puede haberse modificado sustancialmente antes de lanzar la versión definitiva. Microsoft no otorga ninguna garantía, explícita o implícita, con respecto a la información proporcionada aquí.
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
- 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.