Sdílet prostřednictvím


TypeAttributes Výčet

Definice

Určuje atributy typu.

Tento výčet podporuje bitové kombinace hodnot jeho členů.

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
Dědičnost
TypeAttributes
Atributy

Pole

Abstract 128

Určuje, že typ je abstraktní.

AnsiClass 0

LPTSTR se interpretuje jako ANSI.

AutoClass 131072

LPTSTR se interpretuje automaticky.

AutoLayout 0

Určuje, že pole tříd se automaticky stanoví modulem CLR (Common Language Runtime).

BeforeFieldInit 1048576

Určuje, že volání statických metod typu nenutí systém inicializovat typ.

Class 0

Určuje, že typ je třída.

ClassSemanticsMask 32

Určuje sémantické informace třídy; aktuální třída je kontextová (jinak agilní).

CustomFormatClass 196608

LPSTR je interpretován některými implementačními prostředky, které zahrnují možnost vyvolání NotSupportedException. Nepoužívá se v implementaci .NET Framework Microsoftu.

CustomFormatMask 12582912

Používá se k načtení nestandardních informací o kódování pro nativní interoperabilitu. Význam hodnot těchto 2 bitů není zadaný. Nepoužívá se v implementaci .NET Framework Microsoftu.

ExplicitLayout 16

Určuje, že pole třídy jsou rozložena na zadaný posun.

HasSecurity 262144

Typ má k němu přidružené zabezpečení.

Import 4096

Určuje, že se třída nebo rozhraní importují z jiného modulu.

Interface 32

Určuje, že typ je rozhraní.

LayoutMask 24

Určuje informace o rozložení třídy.

NestedAssembly 5

Určuje, že třída je vnořena s viditelností sestavení, a proto je přístupná pouze metodami v rámci jeho sestavení.

NestedFamANDAssem 6

Určuje, že třída je vnořena s viditelností sestavení a rodiny, a proto je přístupná pouze metodami v průniku své rodiny a sestavení.

NestedFamily 4

Určuje, že třída je vnořena s viditelností rodiny, a proto je přístupná pouze metodami v rámci vlastního typu a všech odvozených typů.

NestedFamORAssem 7

Určuje, že třída je vnořena s rodinou nebo viditelností sestavení, a proto je přístupná pouze metodami vnořením do sjednocení své rodiny a sestavení.

NestedPrivate 3

Určuje, že třída je vnořená s privátní viditelností.

NestedPublic 2

Určuje, že třída je vnořená s veřejnou viditelností.

NotPublic 0

Určuje, že třída není veřejná.

Public 1

Určuje, že třída je veřejná.

ReservedMask 264192

Atributy rezervované pro použití za běhu

RTSpecialName 2048

Modul runtime by měl kontrolovat kódování názvů.

Sealed 256

Určuje, že třída je betonová a nelze ji rozšířit.

SequentialLayout 8

Určuje, že pole třídy jsou rozložena postupně v pořadí, v jakém byla pole vygenerovány do metadat.

Serializable 8192

Určuje, že třídu lze serializovat.

SpecialName 1024

Určuje, že třída je speciální způsobem označený názvem.

StringFormatMask 196608

Slouží k načtení informací o řetězci pro nativní interoperabilitu.

UnicodeClass 65536

LPTSTR se interpretuje jako UNICODE.

VisibilityMask 7

Určuje informace o viditelnosti typu.

WindowsRuntime 16384

Určuje typ prostředí Windows Runtime.

Příklady

Následující příklad načte hodnotu Attributes vlastnosti pro Type objekty, které představují řadu různých typů, a pak určuje, zda byly nastaveny příznaky jednotlivých atributů.

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

Poznámky

Některé členy výčtu TypeAttributes jsou masky, které představují sadu vzájemně se vylučujících atributů. Člen například VisibilityMask obsahuje NotPublic, , Public, NestedPublic``NestedPrivate, NestedFamily, NestedAssembly, , NestedFamANDAssem, a NestedFamORAssem členy. Protože každá sada atributů obsahuje člen, jehož podkladová hodnota je nula, měli byste nejprve And hodnotu masky s konkrétní System.Reflection.TypeAttributes hodnotou načtenou z vlastnosti, jako Type.Attributesje . Následující tabulka uvádí masky a jednotlivé členy, které zahrnují:

Maska Zahrnuje
Maska viditelnosti NotPublic
Veřejná
NestedPublic
NestedPrivate
Vnořenéfamily
NestedAssembly
NestedFamANDAssem
NestedFamORAssem
Maska rozložení Automatický popis
Sekvenčnílayout
ExplicitLayout
ClassSemanticsMask Třída
Rozhraní
StringFormatMask AnsiClass
UnicodeClass
Automatická třída
CustomFormatClass
CustomFormatMask Žádní členové.

Členové této třídy enumerator se shodují s enumerátorem CorTypeAttr, jak je definováno v souboru corhdr.h.

Platí pro