TypeAttributes Enum
Definition
Viktigt
En del information gäller för förhandsversionen av en produkt och kan komma att ändras avsevärt innan produkten blir allmänt tillgänglig. Microsoft lämnar inga garantier, uttryckliga eller underförstådda, avseende informationen som visas här.
Anger typattribut.
Den här uppräkningen stöder en bitvis kombination av dess medlemsvärden.
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
- Arv
- Attribut
Fält
| Name | Värde | Description |
|---|---|---|
| AnsiClass | 0 | LPTSTR tolkas som ANSI. |
| AutoLayout | 0 | Anger att klassfälten automatiskt anges av den gemensamma språkkörningen. |
| Class | 0 | Anger att typen är en klass. |
| NotPublic | 0 | Anger att klassen inte är offentlig. |
| Public | 1 | Anger att klassen är offentlig. |
| NestedPublic | 2 | Anger att klassen är kapslad med offentlig synlighet. |
| NestedPrivate | 3 | Anger att klassen är kapslad med privat synlighet. |
| NestedFamily | 4 | Anger att klassen är kapslad med familjesynlighet och därför endast är tillgänglig med metoder inom sin egen typ och alla härledda typer. |
| NestedAssembly | 5 | Anger att klassen är kapslad med sammansättningssynlighet och därför endast är tillgänglig med metoder inom dess sammansättning. |
| NestedFamANDAssem | 6 | Anger att klassen är kapslad med sammansättnings- och familjesynlighet och därför endast är tillgänglig med metoder som ligger i skärningspunkten mellan dess familj och sammansättning. |
| NestedFamORAssem | 7 | Anger att klassen är kapslad med familje- eller sammansättningssynlighet och därför endast är tillgänglig med metoder som ligger i unionen för dess familj och sammansättning. |
| VisibilityMask | 7 | Anger typvisningsinformation. |
| SequentialLayout | 8 | Anger att klassfälten anges sekventiellt, i den ordning fälten skickades till metadata. |
| ExplicitLayout | 16 | Anger att klassfälten anges vid de angivna förskjutningarna. |
| LayoutMask | 24 | Anger information om klasslayout. |
| ClassSemanticsMask | 32 | Anger information om klasssemantik. den aktuella klassen är sammanhangsberoende (annars agil). |
| Interface | 32 | Anger att typen är ett gränssnitt. |
| Abstract | 128 | Anger att typen är abstrakt. |
| Sealed | 256 | Anger att klassen är konkret och inte kan utökas. |
| SpecialName | 1024 | Anger att klassen är speciell på ett sätt som anges med namnet. |
| RTSpecialName | 2048 | Runtime bör kontrollera namnkodning. |
| Import | 4096 | Anger att klassen eller gränssnittet importeras från en annan modul. |
| Serializable | 8192 | Anger att klassen kan serialiseras. |
| WindowsRuntime | 16384 | Anger en Windows Runtime typ. |
| UnicodeClass | 65536 | LPTSTR tolkas som UNICODE. |
| AutoClass | 131072 | LPTSTR tolkas automatiskt. |
| CustomFormatClass | 196608 | LPSTR tolkas med vissa implementeringsspecifika metoder, vilket innefattar möjligheten att utlösa en NotSupportedException. Används inte i Microsoft implementeringen av .NET Framework. |
| StringFormatMask | 196608 | Används för att hämta stränginformation för intern samverkan. |
| HasSecurity | 262144 | Typen har en säkerhets associerad med den. |
| ReservedMask | 264192 | Attribut som är reserverade för körning. |
| BeforeFieldInit | 1048576 | Anger att anrop av statiska metoder av typen inte tvingar systemet att initiera typen. |
| CustomFormatMask | 12582912 | Används för att hämta kodningsinformation som inte är standard för intern interop. Innebörden av värdena för dessa 2 bitar är ospecificerad. Används inte i Microsoft implementeringen av .NET Framework. |
Exempel
I följande exempel hämtas värdet Attributes för egenskapen för Type objekt som representerar ett antal olika typer och avgör sedan om enskilda attributflaggor har angetts.
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
Kommentarer
Några av medlemmarna i TypeAttributes uppräkningen är masker som representerar en uppsättning ömsesidigt uteslutande attribut. Medlemmen innehåller till exempel VisibilityMask medlemmarna , , Public, NestedPublicNestedPrivate, NestedFamily, NestedAssembly, NestedFamANDAssemoch NestedFamORAssem .NotPublic Eftersom varje attributuppsättning innehåller en medlem vars underliggande värde är noll bör du först And använda värdet för masken med det specifika System.Reflection.TypeAttributes värde som hämtats från en egenskap, till exempel Type.Attributes. I följande tabell visas de masker och de enskilda medlemmar som de inkluderar:
| Mask | Innehåller |
|---|---|
| SynlighetMask | NotPublic Offentliga NestedPublic NestedPrivate NestedFamily NestedAssembly NestedFamANDAssem NestedFamORAssem |
| LayoutMask | Autolayout Sekventielltlayout ExplicitLayout |
| ClassSemanticsMask | Klass Interface |
| StringFormatMask | AnsiClass UnicodeClass Autoclass CustomFormatClass |
| CustomFormatMask | Inga medlemmar. |
Medlemmarna i den här uppräkningsklassen matchar CorTypeAttr-uppräknaren enligt definitionen i filen corhdr.h.