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