TypeAttributes Enumeração
Definição
Importante
Algumas informações dizem respeito a um produto pré-lançado que pode ser substancialmente modificado antes de ser lançado. A Microsoft não faz garantias, de forma expressa ou implícita, em relação à informação aqui apresentada.
Especifica atributos de tipo.
Esta enumeração suporta uma combinação bit-a-bit dos respetivos valores 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
- Atributos
Campos
| Name | Valor | Description |
|---|---|---|
| AnsiClass | 0 | LPTSTR é interpretado como ANSI. |
| AutoLayout | 0 | Especifica que os campos de classe são automaticamente dispostos pelo runtime da linguagem comum. |
| Class | 0 | Especifica que o tipo é uma classe. |
| NotPublic | 0 | Especifica que a aula não é pública. |
| Public | 1 | Especifica que a aula é 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, sendo assim acessível apenas por métodos dentro do seu próprio tipo e quaisquer tipos derivados. |
| NestedAssembly | 5 | Especifica que a classe está aninhada com visibilidade de assembly, sendo assim acessível apenas por métodos dentro da sua assembly. |
| NestedFamANDAssem | 6 | Especifica que a classe está aninhada com visibilidade de assembly e family, sendo assim acessível apenas por métodos situados na interseção da sua família e assembly. |
| NestedFamORAssem | 7 | Especifica que a classe está aninhada com visibilidade de família ou assembly, sendo assim acessível apenas por métodos que se encontram na união da sua família e assembly. |
| VisibilityMask | 7 | Especifica a informação de visibilidade do tipo. |
| SequentialLayout | 8 | Especifica que os campos de classe são dispostos sequencialmente, pela ordem em que os campos foram emitidos para os metadados. |
| ExplicitLayout | 16 | Especifica que os campos de classe estão dispostos nos deslocamentos especificados. |
| LayoutMask | 24 | Especifica informação sobre a disposição das classes. |
| ClassSemanticsMask | 32 | Especifica informação semântica de classes; A turma atual é contextual (ou á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 denotada pelo nome. |
| RTSpecialName | 2048 | O tempo de execução deve verificar a codificação dos nomes. |
| 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 | O LPTSTR é interpretado automaticamente. |
| CustomFormatClass | 196608 | O LPSTR é interpretado por algum meio específico da implementação, o que inclui a possibilidade de lançar um NotSupportedException. Não é utilizado na implementação da Microsoft do .NET Framework. |
| StringFormatMask | 196608 | Usado para recuperar informação de strings para interoperabilidade nativa. |
| HasSecurity | 262144 | O tipo tem segurança associada. |
| ReservedMask | 264192 | Atributos reservados para uso em tempo de execução. |
| 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ção de codificação não padrão para interoperabilidade nativa. O significado dos valores destes 2 bits não é especificado. Não é utilizado na implementação da Microsoft do .NET Framework. |
Exemplos
O exemplo seguinte recupera o valor da Attributes propriedade para Type objetos que representam vários tipos diferentes e depois determina se foram definidas bandeiras individuais de atributo.
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
Observações
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 NotPublic, Public, NestedPublic, NestedPrivate, NestedFamily, NestedAssembly, NestedFamANDAssem, e NestedFamORAssem membros. Como cada conjunto de atributos inclui um membro cujo valor subjacente é zero, deve primeiro And o valor da máscara com o valor específico System.Reflection.TypeAttributes obtido de uma propriedade como Type.Attributes. A tabela seguinte lista as máscaras e os membros individuais que elas incluem:
| Máscara | Inclui |
|---|---|
| Máscara de Visibilidade | NotPublic Público NestedPublic NestedPrivate Família Aninhada NestedAssembly NestedFamANDAssem NestedFamORAssem |
| LayoutMask | AutoLayout SequentialLayout ExplicitLayout |
| ClassSemanticsMask | Classe Interface |
| StringFormatMask | AnsiClass UnicodeClass AutoClass CustomFormatClass |
| CustomFormatMask | Sem membros. |
Os membros desta classe de enumerador correspondem ao enumerador CorTypeAttr conforme definido no ficheiro corhdr.h.