TypeAttributes Enum

Definition

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

Gäller för