Freigeben über


TypeAttributes Enumeration

Definition

Gibt Typattribute an.

Diese Enumeration unterstützt eine bitweise Kombination ihrer Memberwerte.

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
Vererbung
TypeAttributes
Attribute

Felder

Name Wert Beschreibung
AnsiClass 0

LPTSTR wird als ANSI interpretiert.

AutoLayout 0

Gibt an, dass Klassenfelder automatisch von der Common Language Runtime angeordnet werden.

Class 0

Gibt an, dass der Typ eine Klasse ist.

NotPublic 0

Gibt an, dass die Klasse nicht öffentlich ist.

Public 1

Gibt an, dass die Klasse öffentlich ist.

NestedPublic 2

Gibt an, dass die Klasse mit öffentlicher Sichtbarkeit geschachtelt ist.

NestedPrivate 3

Gibt an, dass die Klasse mit privater Sichtbarkeit geschachtelt ist.

NestedFamily 4

Gibt an, dass die Klasse mit Familiensichtbarkeit geschachtelt ist und somit nur über Methoden innerhalb des eigenen Typs und aller abgeleiteten Typen zugänglich ist.

NestedAssembly 5

Gibt an, dass die Klasse mit Assemblysichtbarkeit geschachtelt ist und somit nur über Methoden innerhalb der Assembly zugänglich ist.

NestedFamANDAssem 6

Gibt an, dass die Klasse mit Assembly- und Familiensichtbarkeit verschachtelt ist und somit nur durch Methoden zugänglich ist, die im Schnittpunkt ihrer Familie und Assembly liegen.

NestedFamORAssem 7

Gibt an, dass die Klasse mit Familien- oder Assemblysichtbarkeit verschachtelt ist und somit nur durch Methoden zugänglich ist, die in der Vereinigung ihrer Familie und Assembly liegen.

VisibilityMask 7

Gibt Typsichtinformationen an.

SequentialLayout 8

Gibt an, dass Klassenfelder sequenziell angeordnet werden, in der Reihenfolge, in der die Felder an die Metadaten ausgegeben wurden.

ExplicitLayout 16

Gibt an, dass Klassenfelder an den angegebenen Offsets angeordnet werden.

ExtendedLayout 24
LayoutMask 24

Gibt Klassenlayoutinformationen an.

ClassSemanticsMask 32

Gibt Klassensemantikinformationen an; die aktuelle Klasse kontextvoll ist (sonst agile).

Interface 32

Gibt an, dass der Typ eine Schnittstelle ist.

Abstract 128

Gibt an, dass der Typ abstrakt ist.

Sealed 256

Gibt an, dass die Klasse konkret ist und nicht erweitert werden kann.

SpecialName 1024

Gibt an, dass die Klasse auf eine Weise spezialisiert ist, die durch den Namen gekennzeichnet ist.

RTSpecialName 2048

Die Laufzeit sollte die Namenscodierung überprüfen.

Import 4096

Gibt an, dass die Klasse oder Schnittstelle aus einem anderen Modul importiert wird.

Serializable 8192

Gibt an, dass die Klasse serialisiert werden kann.

WindowsRuntime 16384

Gibt einen Windows-Runtime-Typ an.

UnicodeClass 65536

LPTSTR wird als UNICODE interpretiert.

AutoClass 131072

LPTSTR wird automatisch interpretiert.

CustomFormatClass 196608

LPSTR wird von einigen implementierungsspezifischen Mitteln interpretiert, die die Möglichkeit zum Auslösen eines .NotSupportedException Wird in der Microsoft-Implementierung von .NET Framework nicht verwendet.

StringFormatMask 196608

Wird verwendet, um Zeichenfolgeninformationen für die systemeigene Interoperabilität abzurufen.

HasSecurity 262144

Der Typ verfügt über eine sicherheitsbezogene Zuordnung.

ReservedMask 264192

Attribute, die für die Laufzeitverwendung reserviert sind.

BeforeFieldInit 1048576

Gibt an, dass das Aufrufen statischer Methoden des Typs nicht erzwingt, dass das System den Typ initialisiert.

CustomFormatMask 12582912

Wird verwendet, um nicht standardmäßige Codierungsinformationen für systemeigene Interoperabilität abzurufen. Die Bedeutung der Werte dieser 2 Bits ist nicht angegeben. Wird in der Microsoft-Implementierung von .NET Framework nicht verwendet.

Beispiele

Im folgenden Beispiel wird der Wert der Attributes Eigenschaft für Type Objekte abgerufen, die eine Reihe unterschiedlicher Typen darstellen, und anschließend bestimmt, ob einzelne Attributkennzeichnungen festgelegt wurden.

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

Hinweise

Einige Der Member der TypeAttributes Enumeration sind Masken, die einen Satz sich gegenseitig ausschließenden Attribute darstellen. Beispielsweise enthält das VisibilityMask Mitglied die NotPublicElemente , , Public, NestedPublic, NestedPrivate, NestedFamily, NestedAssembly, und NestedFamANDAssemNestedFamORAssem Member. Da jeder Attributsatz ein Element enthält, dessen zugrunde liegender Wert null ist, sollten Sie zuerst And den Wert der Maske mit dem spezifischen System.Reflection.TypeAttributes Wert aus einer Eigenschaft wie Type.Attributesz. B. abrufen. In der folgenden Tabelle sind die Masken und die einzelnen Elemente aufgeführt, die sie enthalten:

Maske Includes
VisibilityMask NotPublic
Öffentlich
NestedPublic
NestedPrivate
Geschachtelte Familie
NestedAssembly
NestedFamANDAssem
NestedFamORAssem
LayoutMaske Autolayout
SequentialLayout
ExplicitLayout
ClassSemanticsMask Klasse
Schnittstelle
StringFormatMask AnsiClass
UnicodeClass
AutoClass
CustomFormatClass
CustomFormatMask Keine Mitglieder.

Die Member dieser Enumerationsklasse stimmen mit dem CorTypeAttr-Enumerator überein, wie in der Datei "corhdr.h" definiert.

Gilt für: