Compartilhar via


TypeAttributes Enumeração

Definição

Especifica atributos de tipo.

Essa enumeração dá suporte a uma combinação bit a bit dos valores de membro.

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
Herança
TypeAttributes
Atributos

Campos

Nome Valor Description
AnsiClass 0

LPTSTR é interpretado como ANSI.

AutoLayout 0

Especifica que os campos de classe são definidos automaticamente pelo common language runtime.

Class 0

Especifica que o tipo é uma classe.

NotPublic 0

Especifica que a classe não é pública.

Public 1

Especifica que a classe é pública.

NestedPublic 2

Especifica que a classe está aninhada com visibilidade pública.

NestedPrivate 3

Especifica que a classe está aninhada com visibilidade privada.

NestedFamily 4

Especifica que a classe está aninhada com visibilidade familiar e, portanto, é acessível apenas por métodos dentro de seu próprio tipo e por tipos derivados.

NestedAssembly 5

Especifica que a classe está aninhada com visibilidade do assembly e, portanto, é acessível apenas por métodos dentro de seu assembly.

NestedFamANDAssem 6

Especifica que a classe está aninhada com a visibilidade do assembly e da família e, portanto, é acessível apenas por métodos que estão na interseção de sua família e assembly.

NestedFamORAssem 7

Especifica que a classe está aninhada com visibilidade de família ou assembly e, portanto, é acessível apenas por métodos que estão na união de sua família e assembly.

VisibilityMask 7

Especifica informações de visibilidade do tipo.

SequentialLayout 8

Especifica que os campos de classe são dispostos sequencialmente, na ordem em que os campos foram emitidos para os metadados.

ExplicitLayout 16

Especifica que os campos de classe são dispostos nos deslocamentos especificados.

ExtendedLayout 24
LayoutMask 24

Especifica informações de layout de classe.

ClassSemanticsMask 32

Especifica informações de semântica de classe; a classe atual é contextual (caso contrário, ágil).

Interface 32

Especifica que o tipo é uma interface.

Abstract 128

Especifica que o tipo é abstrato.

Sealed 256

Especifica que a classe é concreta e não pode ser estendida.

SpecialName 1024

Especifica que a classe é especial de uma forma indicada pelo nome.

RTSpecialName 2048

O runtime deve verificar a codificação de nome.

Import 4096

Especifica que a classe ou interface é importada de outro módulo.

Serializable 8192

Especifica que a classe pode ser serializada.

WindowsRuntime 16384

Especifica um tipo de Windows Runtime.

UnicodeClass 65536

LPTSTR é interpretado como UNICODE.

AutoClass 131072

LPTSTR é interpretado automaticamente.

CustomFormatClass 196608

LPSTR é interpretado por alguns meios específicos à implementação, o que inclui a possibilidade de gerar um NotSupportedException. Não usado na implementação da Microsoft do .NET Framework.

StringFormatMask 196608

Usado para recuperar informações de cadeia de caracteres para interoperabilidade nativa.

HasSecurity 262144

O tipo tem associação de segurança a ele.

ReservedMask 264192

Atributos reservados para uso em runtime.

BeforeFieldInit 1048576

Especifica que chamar métodos estáticos do tipo não força o sistema a inicializar o tipo.

CustomFormatMask 12582912

Usado para recuperar informações de codificação não padrão para interoperabilidade nativa. O significado dos valores desses 2 bits não é especificado. Não usado na implementação da Microsoft do .NET Framework.

Exemplos

O exemplo a seguir recupera o valor da Attributes propriedade para Type objetos que representam vários tipos diferentes e determina se os sinalizadores de atributo individuais foram definidos.

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

Comentários

Alguns dos membros da TypeAttributes enumeração são máscaras que representam um conjunto de atributos mutuamente exclusivos. Por exemplo, o VisibilityMask membro inclui os NotPublicmembros, , Public, NestedPublic, NestedPrivateNestedFamily, NestedAssemblyNestedFamANDAsseme NestedFamORAssem , Como cada conjunto de atributos inclui um membro cujo valor subjacente é zero, você deve primeiro And o valor da máscara com o valor específico System.Reflection.TypeAttributes recuperado de uma propriedade como Type.Attributes. A tabela a seguir lista as máscaras e os membros individuais que eles incluem:

Máscara Includes
Visibilitymask Notpublic
Público
Nestedpublic
NestedPrivate
NestedFamily
NestedAssembly
NestedFamANDAssem
NestedFamORAssem
LayoutMask Autolayout
Sequentiallayout
Explicitlayout
Classsemanticsmask Classe
Interfase
StringFormatMask Ansiclass
Unicodeclass
Autoclass
CustomFormatClass
CustomFormatMask Nenhum membro.

Os membros dessa classe enumerador correspondem ao enumerador CorTypeAttr conforme definido no arquivo corhdr.h.

Aplica-se a