Udostępnij za pośrednictwem


TypeAttributes Wyliczenie

Definicja

Określa atrybuty typu.

To wyliczenie obsługuje bitową kombinację jego wartości składowych.

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
Dziedziczenie
TypeAttributes
Atrybuty

Pola

Abstract 128

Określa, że typ jest abstrakcyjny.

AnsiClass 0

LPTSTR jest interpretowany jako ANSI.

AutoClass 131072

Funkcja LPTSTR jest interpretowana automatycznie.

AutoLayout 0

Określa, że pola klas są automatycznie określone przez środowisko uruchomieniowe języka wspólnego.

BeforeFieldInit 1048576

Określa, że wywoływanie metod statycznych typu nie wymusza inicjowania typu przez system.

Class 0

Określa, że typ jest klasą.

ClassSemanticsMask 32

Określa informacje semantyki klasy; bieżąca klasa jest kontekstowa (inaczej agile).

CustomFormatClass 196608

Funkcja LPSTR jest interpretowana przez niektóre środki specyficzne dla implementacji, co obejmuje możliwość zgłoszenia obiektu NotSupportedException. Nieużytne w Microsoft implementacji .NET Framework.

CustomFormatMask 12582912

Służy do pobierania niestandardowych informacji kodowania dla natywnej międzyoperacyjności. Znaczenie wartości tych 2 bitów jest nieokreślone. Nieużytne w Microsoft implementacji .NET Framework.

ExplicitLayout 16

Określa, że pola klasy są określone przesunięcia.

HasSecurity 262144

Typ ma skojarzenie z zabezpieczeniami.

Import 4096

Określa, że klasa lub interfejs jest importowany z innego modułu.

Interface 32

Określa, że typ jest interfejsem.

LayoutMask 24

Określa informacje o układzie klasy.

NestedAssembly 5

Określa, że klasa jest zagnieżdżona z widocznością zestawu i dlatego jest dostępna tylko przez metody w zestawie.

NestedFamANDAssem 6

Określa, że klasa jest zagnieżdżona z widocznością zestawów i rodzin, a tym samym jest dostępna tylko przez metody leżące na przecięciu jej rodziny i zestawu.

NestedFamily 4

Określa, że klasa jest zagnieżdżona z widocznością rodziny i dlatego jest dostępna tylko przez metody w ramach własnego typu i wszelkich typów pochodnych.

NestedFamORAssem 7

Określa, że klasa jest zagnieżdżona z widocznością rodziny lub zestawu i jest w ten sposób dostępna tylko za pomocą metod leżących w unii rodziny i zestawu.

NestedPrivate 3

Określa, że klasa jest zagnieżdżona z prywatną widocznością.

NestedPublic 2

Określa, że klasa jest zagnieżdżona z publiczną widocznością.

NotPublic 0

Określa, że klasa nie jest publiczna.

Public 1

Określa, że klasa jest publiczna.

ReservedMask 264192

Atrybuty zarezerwowane do użycia w czasie wykonywania.

RTSpecialName 2048

Środowisko uruchomieniowe powinno sprawdzić kodowanie nazw.

Sealed 256

Określa, że klasa jest konkretna i nie można jej rozszerzyć.

SequentialLayout 8

Określa, że pola klas są uporządkowane sekwencyjnie, w kolejności, w których pola zostały emitowane do metadanych.

Serializable 8192

Określa, że klasę można serializować.

SpecialName 1024

Określa, że klasa jest specjalna w sposób oznaczony nazwą.

StringFormatMask 196608

Służy do pobierania informacji o ciągu na potrzeby współdziałania natywnego.

UnicodeClass 65536

LPTSTR jest interpretowany jako UNICODE.

VisibilityMask 7

Określa informacje o widoczności typu.

WindowsRuntime 16384

Określa typ środowisko wykonawcze systemu Windows.

Przykłady

Poniższy przykład pobiera wartość Attributes właściwości dla Type obiektów reprezentujących wiele różnych typów, a następnie określa, czy ustawiono flagi poszczególnych atrybutów.

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

Uwagi

Niektóre elementy członkowskie wyliczenia TypeAttributes to maski reprezentujące zestaw wzajemnie wykluczających się atrybutów. Na przykład VisibilityMask element członkowski zawiera NotPublicelementy członkowskie , , NestedPrivateNestedFamilyNestedPublicNestedAssemblyPublic, NestedFamANDAssemi .NestedFamORAssem Ponieważ każdy zestaw atrybutów zawiera element członkowski, którego wartością bazową jest zero, należy najpierw określić And wartość maski o określonej System.Reflection.TypeAttributes wartości pobranej z właściwości, takiej jak Type.Attributes. W poniższej tabeli wymieniono maski i poszczególne elementy członkowskie, które obejmują:

Maska Zawiera
Maska widoczności NotPublic
Publiczne
Zagnieżdżonypublic
Zagnieżdżonaprivate
ZagnieżdżonaFamily
Zagnieżdżonassembly
NestedFamANDAssem
NestedFamORAssem
Maska układu Autolayout
Sekwencyjnylayout
Jawnalayout
ClassSemanticsMask Klasa
Interfejs
StringFormatMask AnsiClass
UnicodeClass
Autoklasa
CustomFormatClass
Maska formatu niestandardowego Brak członków.

Elementy członkowskie tej klasy wyliczającego są zgodne z modułem wyliczania CorTypeAttr zdefiniowanym w pliku corhdr.h.

Dotyczy