CustomAttributeDataとは? わかりやすく解説

CustomAttributeData クラス

メモ : このクラスは、.NET Framework version 2.0 で新しく追加されたものです。

リフレクションのみのコンテキストに読み込まれるアセンブリ、モジュール、型、メンバ、およびパラメータのカスタム属性データにアクセスできるようにします。

名前空間: System.Reflection
アセンブリ: mscorlib (mscorlib.dll 内)
構文構文

<SerializableAttribute> _
<ComVisibleAttribute(True)> _
Public NotInheritable Class
 CustomAttributeData
Dim instance As CustomAttributeData
[SerializableAttribute] 
[ComVisibleAttribute(true)] 
public sealed class CustomAttributeData
[SerializableAttribute] 
[ComVisibleAttribute(true)] 
public ref class CustomAttributeData sealed
/** @attribute SerializableAttribute() */ 
/** @attribute ComVisibleAttribute(true) */ 
public final class CustomAttributeData
SerializableAttribute 
ComVisibleAttribute(true) 
public final class CustomAttributeData
解説解説

リフレクションのみのコンテキストで検査されているコードは実行できないため、カスタム属性のインスタンスを作成し、System.Attribute.GetCustomAttributes や System.Reflection.MemberInfo.GetCustomAttributes などのメソッドを使用してカスタム属性のプロパティを調べることによってカスタム属性を検査できるとは限りません。また、属性型のコード自体をリフレクションのみのコンテキストに読み込んでも実行することはできません。

CustomAttributeData クラスを使用すると、属性を抽象化することによって、リフレクションのみのコンテキストでカスタム属性を調べることができます。このクラスのメンバを使用すると、属性の位置指定引数および名前付き引数の値を取得できます。列挙体の場合、値は列挙体の基になる型を使用して提供されます。列挙体の名前は、CustomAttributeTypedArgument 構造体で値と共に提供されます。

CustomAttributeData は、リフレクションのみのコンテキストだけでなく、実行コンテキストでも使用できます。たとえば、カスタム属性のコードを含むアセンブリを読み込まない場合もあります。CustomAttributeData クラスを使用することと、System.Attribute.GetCustomAttributes などのメソッドを使用することは、次の点で異なります。

CustomAttributeData クラスのインスタンスを作成するには、static (Visual Basic では Shared) GetCustomAttributes ファクトリ メソッドを使用します。

使用例使用例

2 つのコンストラクタと 1 つのプロパティを使用して、カスタム属性を定義するコード例を次に示します。属性は、アセンブリ、アセンブリで宣言された型、型のメソッド、およびメソッドのパラメータに対して適用されます。アセンブリを実行した場合、アセンブリ自身がリフレクションのみのコンテキストに読み込まれ、アセンブリおよびアセンブリ内に含まれる型とメンバに適用されているカスタム属性に関する情報が表示されます。

Imports System
Imports System.Reflection
Imports System.Collections.Generic

' The example attribute is applied to the assembly.
<Assembly:Example(ExampleKind.ThirdKind, Note:="This is a note
 on the assembly.")>

' An enumeration used by the ExampleAttribute class.
Public Enum ExampleKind
    FirstKind
    SecondKind
    ThirdKind
    FourthKind
End Enum

' An example attribute. The attribute can be applied to all
' targets, from assemblies to parameters.
'
<AttributeUsage(AttributeTargets.All)> _
Public Class ExampleAttribute
    Inherits Attribute

    ' Data for properties.
    Private kindValue As ExampleKind
    Private noteValue As String

    ' Constructors. The parameterless constructor (.ctor) calls
    ' the constructor that specifies ExampleKind, and supplies the
    ' default value.
    '
    Public Sub New(ByVal
 initKind As ExampleKind)
        kindValue = initKind
    End Sub
    Public Sub New()
        Me.New(ExampleKind.FirstKind)
    End Sub

    ' Properties. The Note property must be read/write, so that it can
    ' be used as a named parameter.
    '
    Public ReadOnly Property
 Kind As ExampleKind
        Get
            Return kindValue 
        End Get
    End Property
    Public Property Note As
 String
        Get
            Return noteValue 
        End Get
        Set
            noteValue = value
        End Set
    End Property
End Class

' The example attribute is applied to the test class.
'
<Example(ExampleKind.SecondKind, Note:="This is a note on the
 class.")> _
Public Class Test
    ' The example attribute is applied to a method, using the
    ' parameterless constructor and supplying a named argument.
    ' The attribute is also applied to the method parameter.
    '
    <Example(Note:="This is a note on a method.")>
 _
    Public Sub TestMethod(<Example()>
 ByVal arg As Object)
    End Sub

    ' Sub Main gets objects representing the assembly, the test
    ' type, the test method, and the method parameter. Custom
    ' attribute data is displayed for each of these.
    '
    Public Shared Sub Main()
        Dim asm As [Assembly] = Assembly.ReflectionOnlyLoad("Source")
        Dim t As Type = asm.GetType("Test")
        Dim m As MethodInfo = t.GetMethod("TestMethod")
        Dim p() As ParameterInfo = m.GetParameters()

        Console.WriteLine(vbCrLf & "Attributes for assembly:
 {0}", asm)
        ShowAttributeData(CustomAttributeData.GetCustomAttributes(asm))
        Console.WriteLine(vbCrLf & "Attributes for type: {0}",
 t)
        ShowAttributeData(CustomAttributeData.GetCustomAttributes(t))
        Console.WriteLine(vbCrLf & "Attributes for member:
 {0}", m)
        ShowAttributeData(CustomAttributeData.GetCustomAttributes(m))
        Console.WriteLine(vbCrLf & "Attributes for parameter:
 {0}", p)
        ShowAttributeData(CustomAttributeData.GetCustomAttributes(p(0)))
    End Sub

    Private Shared Sub ShowAttributeData(
 _
        ByVal attributes As IList(Of
 CustomAttributeData))

        For Each cad As
 CustomAttributeData _
            In CType(attributes, IEnumerable(Of
 CustomAttributeData))

            Console.WriteLine("   {0}", cad)
            Console.WriteLine("      Constructor: {0}",
 cad.Constructor)

            Console.WriteLine("      Constructor arguments:")
            For Each cata As
 CustomAttributeTypedArgument _
                In CType(cad.ConstructorArguments, IEnumerable(Of
 CustomAttributeTypedArgument))

                Console.WriteLine("         Type: {0} Value: {1}",
 _
                    cata.ArgumentType, cata.Value)
            Next

            Console.WriteLine("      Named arguments:")
            For Each cana As
 CustomAttributeNamedArgument _
                In CType(cad.NamedArguments, IEnumerable(Of
 CustomAttributeNamedArgument))

                Dim cata As CustomAttributeTypedArgument
 = _
                    cana.TypedValue
                Console.WriteLine("         MemberInfo: {0}",
 _
                    cana.MemberInfo)
                Console.WriteLine("         Type: {0} Value: {1}",
 _
                    cata.ArgumentType, cata.Value)
            Next
        Next
    End Sub
End Class

' This code example produces output similar to the following:
'
'Attributes for assembly: source, Version=0.0.0.0, Culture=neutral,
 PublicKeyToken=null
'   [ExampleAttribute((ExampleKind)2, Note = "This is a note on
 the assembly.")]
'      Constructor: Void .ctor(ExampleKind)
'      Constructor arguments:
'         Type: ExampleKind Value: 2
'      Named arguments:
'         MemberInfo: System.String Note
'         Type: System.String Value: This is a note on the assembly.
'   [System.Runtime.CompilerServices.CompilationRelaxationsAttribute((Int32)8)]
'      Constructor: Void .ctor(Int32)
'      Constructor arguments:
'         Type: System.Int32 Value: 8
'      Named arguments:
'
'Attributes for type: Test
'   [ExampleAttribute((ExampleKind)1, Note = "This is a note on
 the class.")]
'      Constructor: Void .ctor(ExampleKind)
'      Constructor arguments:
'         Type: ExampleKind Value: 1
'      Named arguments:
'         MemberInfo: System.String Note
'         Type: System.String Value: This is a note on the class.
'
'Attributes for member: Void TestMethod(System.Object)
'   [ExampleAttribute(Note = "This is a note on a method.")]
'      Constructor: Void .ctor()
'      Constructor arguments:
'      Named arguments:
'         MemberInfo: System.String Note
'         Type: System.String Value: This is a note on a method.
'
'Attributes for parameter: System.Object arg
'   [ExampleAttribute()]
'      Constructor: Void .ctor()
'      Constructor arguments:
'      Named arguments:
using System;
using System.Reflection;
using System.Collections.Generic;

// The example attribute is applied to the assembly.
[assembly:Example(ExampleKind.ThirdKind, Note="This is a note on the assembly.")]

// An enumeration used by the ExampleAttribute class.
public enum ExampleKind
{
    FirstKind, 
    SecondKind, 
    ThirdKind, 
    FourthKind
};

// An example attribute. The attribute can be applied to all
// targets, from assemblies to parameters.
//
[AttributeUsage(AttributeTargets.All)]
public class ExampleAttribute : Attribute
{
    // Data for properties.
    private ExampleKind kindValue;
    private string noteValue;

    // Constructors. The parameterless constructor (.ctor) calls
    // the constructor that specifies ExampleKind, and supplies the
    // default value.
    //
    public ExampleAttribute(ExampleKind initKind)
    {
        kindValue = initKind;
    }
    public ExampleAttribute() : this(ExampleKind.FirstKind)
 {}

    // Properties. The Note property must be read/write, so that it
    // can be used as a named parameter.
    //
    public ExampleKind Kind { get { return
 kindValue; }}
    public string Note    
    {
        get { return noteValue; }
        set { noteValue = value; }
    }
}

// The example attribute is applied to the test class.
//
[Example(ExampleKind.SecondKind, Note="This is a note on the class.")]
public class Test
{
    // The example attribute is applied to a method, using the
    // parameterless constructor and supplying a named argument.
    // The attribute is also applied to the method parameter.
    //
    [Example(Note="This is a note on a method.")]
    public void TestMethod([Example] object
 arg) { }

    // Main() gets objects representing the assembly, the test
    // type, the test method, and the method parameter. Custom
    // attribute data is displayed for each of these.
    //
    public static void Main()
    {
        Assembly asm = Assembly.ReflectionOnlyLoad("Source");
        Type t = asm.GetType("Test");
        MethodInfo m = t.GetMethod("TestMethod");
        ParameterInfo[] p = m.GetParameters();

        Console.WriteLine("\r\nAttributes for assembly: {0}",
 asm);
        ShowAttributeData(CustomAttributeData.GetCustomAttributes(asm));
        Console.WriteLine("\r\nAttributes for type: {0}",
 t);
        ShowAttributeData(CustomAttributeData.GetCustomAttributes(t));
        Console.WriteLine("\r\nAttributes for member: {0}",
 m);
        ShowAttributeData(CustomAttributeData.GetCustomAttributes(m));
        Console.WriteLine("\r\nAttributes for parameter:
 {0}", p);
        ShowAttributeData(CustomAttributeData.GetCustomAttributes(p[0]));
    }

    private static void
 ShowAttributeData(
        IList<CustomAttributeData> attributes)
    {
        foreach( CustomAttributeData cad in
 attributes )
        {
            Console.WriteLine("   {0}", cad);
            Console.WriteLine("      Constructor: {0}", cad.Constructor);

            Console.WriteLine("      Constructor arguments:");
            foreach( CustomAttributeTypedArgument cata 
                in cad.ConstructorArguments )
            {
                Console.WriteLine("         Type: {0} Value: {1}", 
                    cata.ArgumentType, cata.Value);
            }

            Console.WriteLine("      Named arguments:");
            foreach( CustomAttributeNamedArgument cana 
                in cad.NamedArguments )
            {
                CustomAttributeTypedArgument cata = cana.TypedValue;
                Console.WriteLine("         MemberInfo: {0}", 
                    cana.MemberInfo);
                Console.WriteLine("         Type: {0} Value: {1}", 
                    cata.ArgumentType, cata.Value);
            }
        }
    }
}

/* This code example produces output similar to the following:

Attributes for assembly: source, Version=0.0.0.0, Culture=neutral,
 PublicKeyToken=null
   [ExampleAttribute((ExampleKind)2, Note = "This is a note on the assembly.")]
      Constructor: Void .ctor(ExampleKind)
      Constructor arguments:
         Type: ExampleKind Value: 2
      Named arguments:
         MemberInfo: System.String Note
         Type: System.String Value: This is a note on the assembly.
   [System.Runtime.CompilerServices.CompilationRelaxationsAttribute((Int32)8)]
      Constructor: Void .ctor(Int32)
      Constructor arguments:
         Type: System.Int32 Value: 8
      Named arguments:

Attributes for type: Test
   [ExampleAttribute((ExampleKind)1, Note = "This is a note on the class.")]
      Constructor: Void .ctor(ExampleKind)
      Constructor arguments:
         Type: ExampleKind Value: 1
      Named arguments:
         MemberInfo: System.String Note
         Type: System.String Value: This is a note on the class.

Attributes for member: Void TestMethod(System.Object)
   [ExampleAttribute(Note = "This is a note on a method.")]
      Constructor: Void .ctor()
      Constructor arguments:
      Named arguments:
         MemberInfo: System.String Note
         Type: System.String Value: This is a note on a method.

Attributes for parameter: System.Object arg
   [ExampleAttribute()]
      Constructor: Void .ctor()
      Constructor arguments:
      Named arguments:
*/
using namespace System;
using namespace System::Reflection;
using namespace System::Collections::Generic;

// An enumeration used by the ExampleAttribute class.
public enum class ExampleKind
{
   FirstKind, SecondKind, ThirdKind, FourthKind
};

// An example attribute. The attribute can be applied to all
// targets, from assemblies to parameters.
//
[AttributeUsage(AttributeTargets::All)]
public ref class ExampleAttribute: public
 Attribute
{
private:
   // Data for properties.
   ExampleKind kindValue;
   String^ noteValue;

   // Constructors. The parameterless constructor (.ctor) calls
   // the constructor that specifies ExampleKind, and supplies the
   // default value.
   //
   void ExampleAttributeInitialize( ExampleKind initKind )
   {
      kindValue = initKind;
   }
public:
   ExampleAttribute()
   {
      ExampleAttributeInitialize( ExampleKind::FirstKind );
   }
   ExampleAttribute( ExampleKind initKind )
   {
      ExampleAttributeInitialize( initKind );
   }

   // Properties. The Note property must be read/write, so that it
   // can be used as a named parameter.
   //
   property ExampleKind Kind 
   {
      ExampleKind get()
      {
         return kindValue;
      }
   }
   property String^ Note 
   {
      String^ get()
      {
         return noteValue;
      }

      void set( String^ value )
      {
         noteValue = value;
      }
   }
};

// The example attribute is applied to the assembly.
[assembly:Example(ExampleKind::ThirdKind,Note="This is a note on the assembly.")];

// The example attribute is applied to the test class.
//
[Example(ExampleKind::SecondKind,Note="This is a note on the class.")]
public ref class Test
{
public:
   // The example attribute is applied to a method, using the
   // parameterless constructor and supplying a named argument.
   // The attribute is also applied to the method parameter.
   //
   [Example(Note="This is a note on a method.")]
   void TestMethod( [Example] Object^ arg ){}

   // Main() gets objects representing the assembly, the test
   // type, the test method, and the method parameter. Custom
   // attribute data is displayed for each of these.
   //
   static void Main()
   {
      Assembly^ assembly = Assembly::ReflectionOnlyLoad( "Source" );
      Type^ t = assembly->GetType( "Test" );
      MethodInfo^ m = t->GetMethod( "TestMethod" );
      array<ParameterInfo^>^p = m->GetParameters();

      Console::WriteLine( "\r\nAttributes for assembly: {0}",
 assembly );
      ShowAttributeData( CustomAttributeData::GetCustomAttributes( assembly ) );
      Console::WriteLine( "\r\nAttributes for type: {0}",
 t );
      ShowAttributeData( CustomAttributeData::GetCustomAttributes( t ) );
      Console::WriteLine( "\r\nAttributes for member: {0}",
 m );
      ShowAttributeData( CustomAttributeData::GetCustomAttributes( m ) );
      Console::WriteLine( "\r\nAttributes for parameter:
 {0}", p );
      ShowAttributeData( CustomAttributeData::GetCustomAttributes( p[ 0 ] ) );
   }

private:
   static void ShowAttributeData( IList<
 CustomAttributeData^ >^ attributes )
   {
      for each ( CustomAttributeData^ cad in
 attributes )
      {
         Console::WriteLine( "   {0}", cad );
         Console::WriteLine( "      Constructor: {0}", cad->Constructor
 );

         Console::WriteLine( "      Constructor arguments:" );
         for each ( CustomAttributeTypedArgument^ cata in
 cad->ConstructorArguments )
         {
            Console::WriteLine( "         Type: {0} Value: {1}",
               cata->ArgumentType, cata->Value );
         }

         Console::WriteLine( "      Named arguments:" );
         for each ( CustomAttributeNamedArgument cana in
 cad->NamedArguments )
         {
            CustomAttributeTypedArgument cata = cana.TypedValue;
            Console::WriteLine( "         MemberInfo: {0}", cana.MemberInfo
 );
            Console::WriteLine( "         Type: {0} Value: {1}", cata.ArgumentType,
 cata.Value );
         }
      }
   }
};

int main()
{
   Test::Main();
}

/* This code example produces output similar to the following:

Attributes for assembly: source, Version=0.0.0.0, Culture=neutral,
 PublicKeyToken=null
   [ExampleAttribute((ExampleKind)2, Note = "This is a note on the assembly.")]
      Constructor: Void .ctor(ExampleKind)
      Constructor arguments:
         Type: ExampleKind Value: 2
      Named arguments:
         MemberInfo: System.String Note
         Type: System.String Value: This is a note on the assembly.
   [System.Runtime.CompilerServices.CompilationRelaxationsAttribute((Int32)8)]
      Constructor: Void .ctor(Int32)
      Constructor arguments:
         Type: System.Int32 Value: 8
      Named arguments:

Attributes for type: Test
   [ExampleAttribute((ExampleKind)1, Note = "This is a note on the class.")]
      Constructor: Void .ctor(ExampleKind)
      Constructor arguments:
         Type: ExampleKind Value: 1
      Named arguments:
         MemberInfo: System.String Note
         Type: System.String Value: This is a note on the class.

Attributes for member: Void TestMethod(System.Object)
   [ExampleAttribute(Note = "This is a note on a method.")]
      Constructor: Void .ctor()
      Constructor arguments:
      Named arguments:
         MemberInfo: System.String Note
         Type: System.String Value: This is a note on a method.

Attributes for parameter: System.Object arg
   [ExampleAttribute()]
      Constructor: Void .ctor()
      Constructor arguments:
      Named arguments:
*/
継承階層継承階層
System.Object
  System.Reflection.CustomAttributeData
スレッド セーフスレッド セーフ
この型の public static (Visual Basic では Shared) メンバはすべて、スレッド セーフです。インスタンス メンバの場合は、スレッド セーフであるとは限りません。
プラットフォームプラットフォーム
バージョン情報バージョン情報
参照参照
関連項目
CustomAttributeData メンバ
System.Reflection 名前空間
ReflectionOnlyLoad
ReflectionOnlyGetType

CustomAttributeData プロパティ


CustomAttributeData メソッド


CustomAttributeData メンバ

リフレクションのみのコンテキストに読み込まれるアセンブリ、モジュール、型、メンバ、およびパラメータのカスタム属性データにアクセスできるようにします。

CustomAttributeData データ型で公開されるメンバを以下の表に示します。


パブリック プロパティパブリック プロパティ
パブリック メソッドパブリック メソッド
参照参照

関連項目

CustomAttributeData クラス
System.Reflection 名前空間
ReflectionOnlyLoad
ReflectionOnlyGetType



英和和英テキスト翻訳

英語⇒日本語日本語⇒英語

辞書ショートカット

すべての辞書の索引

「CustomAttributeData」の関連用語

CustomAttributeDataのお隣キーワード
検索ランキング

   

英語⇒日本語
日本語⇒英語
   



CustomAttributeDataのページの著作権

   
日本マイクロソフト株式会社日本マイクロソフト株式会社
© 2026 Microsoft.All rights reserved.

©2026 GRAS Group, Inc.RSS