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

Name Hodnota Description
AnsiClass 0

LPTSTR se interpretuje jako ANSI.

AutoLayout 0

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

Class 0

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

NotPublic 0

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

Public 1

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

NestedPublic 2

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

NestedPrivate 3

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

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ů.

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, které leží v průsečíku své rodiny a sestavení.

NestedFamORAssem 7

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

VisibilityMask 7

Určuje informace o viditelnosti typu.

SequentialLayout 8

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

ExplicitLayout 16

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

ExtendedLayout 24
LayoutMask 24

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

ClassSemanticsMask 32

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

Interface 32

Určuje, že typ je rozhraní.

Abstract 128

Určuje, že typ je abstraktní.

Sealed 256

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

SpecialName 1024

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

RTSpecialName 2048

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

Import 4096

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

Serializable 8192

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

WindowsRuntime 16384

Určuje typ prostředí Windows Runtime.

UnicodeClass 65536

LPTSTR je interpretován jako UNICODE.

AutoClass 131072

LPTSTR se interpretuje automaticky.

CustomFormatClass 196608

LPSTR je interpretován některými prostředky specifickými pro implementaci, což zahrnuje možnost vyvolání NotSupportedException. Nepoužívá se v implementaci rozhraní .NET Framework od Microsoftu.

StringFormatMask 196608

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

HasSecurity 262144

Typ má přidružené zabezpečení.

ReservedMask 264192

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

BeforeFieldInit 1048576

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

CustomFormatMask 12582912

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

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 obsahuje , , NestedPublicPublicNestedFamilyNestedPrivate, NestedAssembly, NestedFamANDAssem, a NestedFamORAssem členy.NotPublicVisibilityMask Vzhledem k tomu, že každá sada atributů obsahuje člena, jehož základní hodnota je nula, měli byste nejprve And hodnotu masky s konkrétní System.Reflection.TypeAttributes hodnotou načtenou z vlastnosti, například Type.Attributes. Následující tabulka uvádí masky a jednotlivé členy, které zahrnují:

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

Členové této třídy enumerator odpovídají CorTypeAttr enumerator, jak je definován v souboru corhdr.h.

Platí pro