TypeAttributes Enumeration
Collapse the table of content
Expand the table of content

TypeAttributes Enumeration

[ This article is for Windows Phone 8 developers. If you’re developing for Windows 10, see the latest documentation. ]

Specifies type attributes.

This enumeration has a FlagsAttribute attribute that allows a bitwise combination of its member values.

Namespace:  System.Reflection
Assembly:  mscorlib (in mscorlib.dll)

public enum TypeAttributes

Member nameDescription
AbstractSpecifies that the type is abstract.
AnsiClassLPTSTR is interpreted as ANSI.
AutoClassLPTSTR is interpreted automatically.
AutoLayoutSpecifies that class fields are automatically laid out by the common language runtime.
BeforeFieldInitSpecifies that calling static methods of the type does not force the system to initialize the type.
ClassSpecifies that the type is a class.
ClassSemanticsMaskSpecifies class semantics information; the current class is contextful (else agile).
CustomFormatClassLPSTR is interpreted by some implementation-specific means, which includes the possibility of throwing a NotSupportedException. Not used in the Microsoft implementation of the .NET Framework.
CustomFormatMaskUsed to retrieve non-standard encoding information for native interop. The meaning of the values of these 2 bits is unspecified. Not used in the Microsoft implementation of the .NET Framework.
ExplicitLayoutSpecifies that class fields are laid out at the specified offsets.
HasSecurityType has security associate with it.
ImportSpecifies that the class or interface is imported from another module.
InterfaceSpecifies that the type is an interface.
LayoutMaskSpecifies class layout information.
NestedAssemblySpecifies that the class is nested with assembly visibility, and is thus accessible only by methods within its assembly.
NestedFamANDAssemSpecifies that the class is nested with assembly and family visibility, and is thus accessible only by methods lying in the intersection of its family and assembly.
NestedFamilySpecifies that the class is nested with family visibility, and is thus accessible only by methods within its own type and any subtypes.
NestedFamORAssemSpecifies that the class is nested with family or assembly visibility, and is thus accessible only by methods lying in the union of its family and assembly.
NestedPrivateSpecifies that the class is nested with private visibility.
NestedPublicSpecifies that the class is nested with public visibility.
NotPublicSpecifies that the class is not public.
PublicSpecifies that the class is public.
ReservedMaskAttributes reserved for runtime use.
RTSpecialNameRuntime should check name encoding.
SealedSpecifies that the class is concrete and cannot be extended.
SequentialLayoutSpecifies that class fields are laid out sequentially, in the order that the fields were emitted to the metadata.
SerializableSpecifies that the class can be serialized.
SpecialNameSpecifies that the class is special in a way denoted by the name.
StringFormatMaskUsed to retrieve string information for native interoperability.
UnicodeClassLPTSTR is interpreted as UNICODE.
VisibilityMaskSpecifies type visibility information.
WindowsRuntimeSpecifies a Windows Runtime type.

The members of this enumerator class match the CorTypeAttr enumerator as defined in the corhdr.h file.

The following example shows the use of type attributes. The fact that there is a member in each of several groupings that has the value zero means that you must use masks before testing for those members.

For most purposes, properties like Type.IsClass, Type.IsAutoLayout, and Type.IsSpecialName are easier to use than type attributes.

using System;
using System.Reflection;

internal struct S
    public int X;

public abstract class Example
    protected sealed class NestedClass {}

    public interface INested {}

    private static System.Windows.Controls.TextBlock outputBlock;

    public static void Demo(System.Windows.Controls.TextBlock outputBlock)
        Example.outputBlock = outputBlock;


    private static void DisplayAttributes(Type t)
        outputBlock.Text += "Attributes for type "+t.Name+":\n";

        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:
                outputBlock.Text += "   ...is not public\n";
            case TypeAttributes.Public:
                outputBlock.Text += "   ...is public\n";
            case TypeAttributes.NestedPublic:
                outputBlock.Text += "   ...is nested and public\n";
            case TypeAttributes.NestedPrivate:
                outputBlock.Text += "   ...is nested and private\n";
            case TypeAttributes.NestedFamANDAssem:
                outputBlock.Text += "   ...is nested, and inheritable only within the assembly" +
                   "\n         (cannot be declared in C#)\n";
            case TypeAttributes.NestedAssembly:
                outputBlock.Text += "   ...is nested and internal\n";
            case TypeAttributes.NestedFamily:
                outputBlock.Text += "   ...is nested and protected\n";
            case TypeAttributes.NestedFamORAssem:
                outputBlock.Text += "   ...is nested and protected internal\n";

        TypeAttributes layout = attr & TypeAttributes.LayoutMask;
        switch (layout)
            case TypeAttributes.AutoLayout:
                outputBlock.Text += "   ...is AutoLayout\n";
            case TypeAttributes.SequentialLayout:
                outputBlock.Text += "   ...is SequentialLayout\n";
            case TypeAttributes.ExplicitLayout:
                outputBlock.Text += "   ...is ExplicitLayout\n";

        TypeAttributes classSemantics = attr & TypeAttributes.ClassSemanticsMask;
        switch (classSemantics)
            case TypeAttributes.Class:
                if (t.IsValueType)
                    outputBlock.Text += "   ...is a value type\n";
                    outputBlock.Text += "   ...is a class\n";
            case TypeAttributes.Interface:
                outputBlock.Text += "   ...is an interface\n";

        if (0!=(attr & TypeAttributes.Abstract)) 
            outputBlock.Text += "   ...is abstract\n";

        if (0!=(attr & TypeAttributes.Sealed)) 
            outputBlock.Text += "   ...is sealed\n";

/* This example produces 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

Windows Phone OS

Supported in: 8.1, 8.0, 7.1, 7.0

Windows Phone

© 2017 Microsoft