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 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
- 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 NotPublic
miembros , Public
, NestedPrivate``NestedPublic``NestedAssembly``NestedFamily
, NestedFamANDAssem
y .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.