TypeAttributes Enumeration
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
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
- Attribute
Felder
Abstract | 128 | Gibt an, dass der Typ abstrakt ist. |
AnsiClass | 0 | LPTSTR wird als ANSI-Code interpretiert. |
AutoClass | 131072 | LPTSTR wird automatisch interpretiert. |
AutoLayout | 0 | Gibt an, dass das Layout der Klassenfelder automatisch durch die Common Language Runtime erfolgt. |
BeforeFieldInit | 1048576 | Gibt an, dass durch den Aufruf von statischen Methoden des Typs nicht die Initialisierung dieses Typs durch das System erzwungen wird. |
Class | 0 | Gibt an, dass der Typ eine Klasse ist. |
ClassSemanticsMask | 32 | Gibt Informationen zur Klassensemantik an. Die aktuelle Klasse ist kontextabhängig (andernfalls beweglich). |
CustomFormatClass | 196608 | LPSTR wird mit einigen implementierungsabhängigen Mitteln interpretiert. Dazu zählt auch die Möglichkeit, eine NotSupportedException auszulösen. Wird nicht in der Microsoft Implementierung des .NET Framework verwendet. |
CustomFormatMask | 12582912 | Wird verwendet, um nicht standardkonforme Codierungsinformationen für systemeigenes Interop abzurufen. Die Bedeutung der Werte dieser 2 Bits ist nicht festgelegt. Wird nicht in der Microsoft Implementierung des .NET Framework verwendet. |
ExplicitLayout | 16 | Gibt an, dass das Layout der Klassenfelder an den angegebenen Offsets erfolgt. |
HasSecurity | 262144 | Dem Typ ist Sicherheit zugeordnet. |
Import | 4096 | Gibt an, dass die Klasse oder die Schnittstelle aus einem anderen Modul importiert wird. |
Interface | 32 | Gibt an, dass der Typ eine Schnittstelle ist. |
LayoutMask | 24 | Gibt Informationen zum Klassenlayout an. |
NestedAssembly | 5 | Gibt an, dass die Klasse mit Assemblysichtbarkeit geschachtelt ist, und dass daher nur mit Methoden auf die Klasse zugegriffen werden kann, die sich in ihrer Assembly befinden. |
NestedFamANDAssem | 6 | Gibt an, dass die Klasse mit Assembly- und Familiensichtbarkeit geschachtelt ist und daher nur mit Methoden auf die Klasse zugegriffen werden kann, die zur Schnittmenge ihrer Familie und Assembly gehören. |
NestedFamily | 4 | Gibt an, dass die Klasse mit Familiensichtbarkeit geschachtelt ist und daher nur mit Methoden auf die Klasse zugegriffen werden kann, die sich innerhalb des Typs oder eines beliebigen abgeleiteten Typs befinden. |
NestedFamORAssem | 7 | Gibt an, dass die Klasse mit Assembly- oder Familiensichtbarkeit geschachtelt ist und daher nur mit Methoden auf die Klasse zugegriffen werden kann, die zur Gesamtmenge ihrer Familie und Assembly gehören. |
NestedPrivate | 3 | Gibt an, dass die Klasse mit privater Sichtbarkeit geschachtelt ist. |
NestedPublic | 2 | Gibt an, dass die Klasse mit öffentlicher Sichtbarkeit geschachtelt ist. |
NotPublic | 0 | Gibt an, dass die Klasse nicht öffentlich ist. |
Public | 1 | Gibt an, dass die Klasse öffentlich ist. |
ReservedMask | 264192 | Attribute, die für die Verwendung zur Laufzeit reserviert sind. |
RTSpecialName | 2048 | Die Laufzeit muss die Namenscodierung überprüfen. |
Sealed | 256 | Gibt an, dass die Klasse konkret ist und nicht erweitert werden kann. |
SequentialLayout | 8 | Gibt an, dass das Layout der Klassenfelder sequenziell in der Reihenfolge erfolgt, in der die Felder an die Metadaten ausgegeben wurden. |
Serializable | 8192 | Gibt an, dass die Klasse serialisiert werden kann. |
SpecialName | 1024 | Gibt an, dass der Name eine Besonderheit der Klasse bezeichnet. |
StringFormatMask | 196608 | Wird zum Abrufen von Zeichenfolgeninformationen für die systemeigene Interoperabilität verwendet. |
UnicodeClass | 65536 | LPTSTR wird als UNICODE interpretiert. |
VisibilityMask | 7 | Gibt Informationen zur Sichtbarkeit des Typs an. |
WindowsRuntime | 16384 | Gibt einen Windows-Runtime-Typ an. |
Beispiele
Im folgenden Beispiel wird der Wert der Attributes -Eigenschaft für Type Objekte abgerufen, die eine Reihe verschiedener Typen darstellen, und anschließend bestimmt, ob einzelne Attributflags 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 eine Reihe von sich gegenseitig ausschließenden Attributen darstellen. Das Element enthält beispielsweise VisibilityMask
die NotPublic
- , Public
- NestedPublic
, - NestedPrivate
, NestedFamily
- NestedAssembly
NestedFamANDAssem
und NestedFamORAssem
-Member. Da jeder Attributsatz ein Element enthält, dessen zugrunde liegender Wert 0 ist, sollten Sie zuerst And
den Wert der Maske mit dem spezifischen System.Reflection.TypeAttributes Wert aus einer Eigenschaft wie Type.Attributesabrufen. In der folgenden Tabelle sind die Masken und die einzelnen Elemente aufgeführt, die sie enthalten:
Mask | Includes |
---|---|
VisibilityMask | NotPublic Öffentlich NestedPublic NestedPrivate Geschachtelte Familie NestedAssembly NestedFamANDAssem NestedFamORAssem |
LayoutMask | Autolayout SequentialLayout ExplicitLayout |
ClassSemanticsMask | Klasse Schnittstelle |
StringFormatMask | AnsiClass UnicodeClass AutoClass CustomFormatClass |
CustomFormatMask | Keine Member. |
Die Member dieser Enumeratorklasse entsprechen dem CorTypeAttr-Enumerator, der in der Datei "corhdr.h" definiert ist.