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



英和和英テキスト翻訳>> Weblio翻訳
英語⇒日本語日本語⇒英語
  

辞書ショートカット

すべての辞書の索引

「CustomAttributeData クラス」の関連用語

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

   

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



CustomAttributeData クラスのページの著作権
Weblio 辞書 情報提供元は 参加元一覧 にて確認できます。

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

©2024 GRAS Group, Inc.RSS