Type.Attributes プロパティ


Type に関連付けられている属性を取得します。Gets the attributes associated with the Type.

 property System::Reflection::TypeAttributes Attributes { System::Reflection::TypeAttributes get(); };
public System.Reflection.TypeAttributes Attributes { get; }
member this.Attributes : System.Reflection.TypeAttributes
Public ReadOnly Property Attributes As TypeAttributes


TypeAttributes の属性セットを表す Type オブジェクト。ただし、Type がジェネリック型パラメーターを表す場合、値は未指定。A TypeAttributes object representing the attribute set of the Type, unless the Type represents a generic type parameter, in which case the value is unspecified.


次の例では、Attributes プロパティを使用します。The following example uses the Attributes property.

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");
               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" +
                      "\n         (cannot be declared in C#)");
               case TypeAttributes.NestedAssembly:
                   Console.WriteLine("   ...is nested and internal");
               case TypeAttributes.NestedFamily:
                   Console.WriteLine("   ...is nested and protected");
               case TypeAttributes.NestedFamORAssem:
                   Console.WriteLine("   ...is nested and protected internal");

           // Use the layout mask to test for layout attributes.
           TypeAttributes layout = attr & TypeAttributes.LayoutMask;
           switch (layout)
               case TypeAttributes.AutoLayout:
                   Console.WriteLine("   ...is AutoLayout");
               case TypeAttributes.SequentialLayout:
                   Console.WriteLine("   ...is SequentialLayout");
               case TypeAttributes.ExplicitLayout:
                   Console.WriteLine("   ...is ExplicitLayout");

           // 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");
                       Console.WriteLine("   ...is a class");
               case TypeAttributes.Interface:
                   Console.WriteLine("   ...is an interface");

           if ((attr & TypeAttributes.Abstract) != 0)
               Console.WriteLine("   ...is abstract");

           if ((attr & TypeAttributes.Sealed) != 0)
               Console.WriteLine("   ...is sealed");
// 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")
                       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")
    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


TypeAttributes 列挙体の一部のメンバーは、値のグループを表すマスクです。Some members of the TypeAttributes enumeration are masks that represent a group of values. 各グループには、基になる値が0である1つのメンバーが含まれます。Each group includes one member whose underlying value is zero. たとえば、TypeAttributes.VisibilityMask グループの TypeAttributes.NotPublic メンバーの基になる値は、TypeAttributes.SequentialLayout グループの TypeAttributes.AutoLayout メンバーと同様に0になります。For example, the underlying value of the TypeAttributes.NotPublic member in the TypeAttributes.VisibilityMask group is zero, as is the TypeAttributes.AutoLayout member in the TypeAttributes.SequentialLayout group. このため、これらの値をテストする前にマスクを使用する必要があります。Because of this, you must use the mask before testing for those values. 具体的な例を次に示します。The example provides an illustration.


ほとんどの場合、IsClassIsAutoLayoutIsSpecialName などのプロパティは、型属性よりも簡単に使用できます。For most purposes, properties like IsClass,IsAutoLayout, and IsSpecialName are easier to use than type attributes.

現在の Type が構築ジェネリック型を表している場合、このプロパティはジェネリック型定義の属性を返します。If the current Type represents a constructed generic type, this property returns the attributes of the generic type definition. たとえば、MyGenericClass<int> (Visual Basic のMyGenericClass(Of Integer)) に対して返される属性は MyGenericClass<T> (MyGenericClass(Of T) では Visual Basic) の属性です。For example, the attributes returned for MyGenericClass<int> (MyGenericClass(Of Integer) in Visual Basic) are the attributes of MyGenericClass<T> (MyGenericClass(Of T) in Visual Basic).

現在の Type がジェネリック型パラメーターを表している場合 (つまり、IsGenericParameter プロパティが true を返した場合、このプロパティによって返される TypeAttributes 値は指定されていません。If the current Type represents a generic type parameter - that is, if the IsGenericParameter property returns true - the TypeAttributes value returned by this property is unspecified.