Attribute.GetCustomAttributes Attribute.GetCustomAttributes Attribute.GetCustomAttributes Attribute.GetCustomAttributes Method

定義

アセンブリ、モジュール、型のメンバー、またはメソッド パラメーターに適用されたカスタム属性の配列を取得します。Retrieves an array of the custom attributes applied to an assembly, module, type member, or method parameter.

オーバーロード

GetCustomAttributes(Module, Type) GetCustomAttributes(Module, Type) GetCustomAttributes(Module, Type) GetCustomAttributes(Module, Type)

モジュールに適用されたカスタム属性の配列を取得します。Retrieves an array of the custom attributes applied to a module. 各パラメーターは、対象のモジュールと検索対象のカスタム属性の型を指定します。Parameters specify the module, and the type of the custom attribute to search for.

GetCustomAttributes(ParameterInfo, Type, Boolean) GetCustomAttributes(ParameterInfo, Type, Boolean) GetCustomAttributes(ParameterInfo, Type, Boolean) GetCustomAttributes(ParameterInfo, Type, Boolean)

メソッド パラメーターに適用されたカスタム属性の配列を取得します。Retrieves an array of the custom attributes applied to a method parameter. 各パラメーターは、対象のメソッド パラメーター、検索対象のカスタム属性の型、およびそのメソッド パラメーターの先祖を検索するかどうかを指定します。Parameters specify the method parameter, the type of the custom attribute to search for, and whether to search ancestors of the method parameter.

GetCustomAttributes(Module, Type, Boolean) GetCustomAttributes(Module, Type, Boolean) GetCustomAttributes(Module, Type, Boolean) GetCustomAttributes(Module, Type, Boolean)

モジュールに適用されたカスタム属性の配列を取得します。Retrieves an array of the custom attributes applied to a module. 各パラメーターは、対象のモジュール、検索対象のカスタム属性の型、および無視する検索オプションを指定します。Parameters specify the module, the type of the custom attribute to search for, and an ignored search option.

GetCustomAttributes(MemberInfo, Type, Boolean) GetCustomAttributes(MemberInfo, Type, Boolean) GetCustomAttributes(MemberInfo, Type, Boolean)

型のメンバーに適用されたカスタム属性の配列を取得します。Retrieves an array of the custom attributes applied to a member of a type. 各パラメーターは、対象のメンバー、検索対象のカスタム属性の型、およびそのメンバーの先祖を検索するかどうかを指定します。Parameters specify the member, the type of the custom attribute to search for, and whether to search ancestors of the member.

GetCustomAttributes(Assembly, Type, Boolean) GetCustomAttributes(Assembly, Type, Boolean) GetCustomAttributes(Assembly, Type, Boolean) GetCustomAttributes(Assembly, Type, Boolean)

アセンブリに適用されたカスタム属性の配列を取得します。Retrieves an array of the custom attributes applied to an assembly. 各パラメーターは、対象のアセンブリ、検索対象のカスタム属性の型、および無視する検索オプションを指定します。Parameters specify the assembly, the type of the custom attribute to search for, and an ignored search option.

GetCustomAttributes(ParameterInfo, Type) GetCustomAttributes(ParameterInfo, Type) GetCustomAttributes(ParameterInfo, Type) GetCustomAttributes(ParameterInfo, Type)

メソッド パラメーターに適用されたカスタム属性の配列を取得します。Retrieves an array of the custom attributes applied to a method parameter. 各パラメーターは、対象のメソッド パラメーターと検索対象のカスタム属性の型を指定します。Parameters specify the method parameter, and the type of the custom attribute to search for.

GetCustomAttributes(Module, Boolean) GetCustomAttributes(Module, Boolean) GetCustomAttributes(Module, Boolean) GetCustomAttributes(Module, Boolean)

モジュールに適用されたカスタム属性の配列を取得します。Retrieves an array of the custom attributes applied to a module. 各パラメーターは、対象のモジュールと無視する検索オプションを指定します。Parameters specify the module, and an ignored search option.

GetCustomAttributes(ParameterInfo, Boolean) GetCustomAttributes(ParameterInfo, Boolean) GetCustomAttributes(ParameterInfo, Boolean) GetCustomAttributes(ParameterInfo, Boolean)

メソッド パラメーターに適用されたカスタム属性の配列を取得します。Retrieves an array of the custom attributes applied to a method parameter. 各パラメーターは、対象のメソッド パラメーターと、メソッド パラメーターの先祖を検索するかどうかを指定します。Parameters specify the method parameter, and whether to search ancestors of the method parameter.

GetCustomAttributes(MemberInfo, Boolean) GetCustomAttributes(MemberInfo, Boolean) GetCustomAttributes(MemberInfo, Boolean) GetCustomAttributes(MemberInfo, Boolean)

型のメンバーに適用されたカスタム属性の配列を取得します。Retrieves an array of the custom attributes applied to a member of a type. 各パラメーターは、対象のメンバー、検索対象のカスタム属性の型、およびそのメンバーの先祖を検索するかどうかを指定します。Parameters specify the member, the type of the custom attribute to search for, and whether to search ancestors of the member.

GetCustomAttributes(Assembly, Type) GetCustomAttributes(Assembly, Type) GetCustomAttributes(Assembly, Type) GetCustomAttributes(Assembly, Type)

アセンブリに適用されたカスタム属性の配列を取得します。Retrieves an array of the custom attributes applied to an assembly. 各パラメーターは、対象のアセンブリと検索対象のカスタム属性の型を指定します。Parameters specify the assembly, and the type of the custom attribute to search for.

GetCustomAttributes(Assembly, Boolean) GetCustomAttributes(Assembly, Boolean) GetCustomAttributes(Assembly, Boolean) GetCustomAttributes(Assembly, Boolean)

アセンブリに適用されたカスタム属性の配列を取得します。Retrieves an array of the custom attributes applied to an assembly. 各パラメーターは、対象のアセンブリと無視する検索オプションを指定します。Parameters specify the assembly, and an ignored search option.

GetCustomAttributes(ParameterInfo) GetCustomAttributes(ParameterInfo) GetCustomAttributes(ParameterInfo) GetCustomAttributes(ParameterInfo)

メソッド パラメーターに適用されたカスタム属性の配列を取得します。Retrieves an array of the custom attributes applied to a method parameter. パラメーターは、対象のメソッド パラメーターを指定します。A parameter specifies the method parameter.

GetCustomAttributes(Module) GetCustomAttributes(Module) GetCustomAttributes(Module) GetCustomAttributes(Module)

モジュールに適用されたカスタム属性の配列を取得します。Retrieves an array of the custom attributes applied to a module. パラメーターは、対象のモジュールを指定します。A parameter specifies the module.

GetCustomAttributes(MemberInfo) GetCustomAttributes(MemberInfo) GetCustomAttributes(MemberInfo) GetCustomAttributes(MemberInfo)

型のメンバーに適用されたカスタム属性の配列を取得します。Retrieves an array of the custom attributes applied to a member of a type. パラメーターでメンバーを指定します。A parameter specifies the member.

GetCustomAttributes(Assembly) GetCustomAttributes(Assembly) GetCustomAttributes(Assembly) GetCustomAttributes(Assembly)

アセンブリに適用されたカスタム属性の配列を取得します。Retrieves an array of the custom attributes applied to an assembly. パラメーターは対象のアセンブリを指定します。A parameter specifies the assembly.

GetCustomAttributes(MemberInfo, Type) GetCustomAttributes(MemberInfo, Type) GetCustomAttributes(MemberInfo, Type)

型のメンバーに適用されたカスタム属性の配列を取得します。Retrieves an array of the custom attributes applied to a member of a type. 各パラメーターは、対象のメンバーと検索対象のカスタム属性の型を指定します。Parameters specify the member, and the type of the custom attribute to search for.

GetCustomAttributes(Module, Type) GetCustomAttributes(Module, Type) GetCustomAttributes(Module, Type) GetCustomAttributes(Module, Type)

モジュールに適用されたカスタム属性の配列を取得します。Retrieves an array of the custom attributes applied to a module. 各パラメーターは、対象のモジュールと検索対象のカスタム属性の型を指定します。Parameters specify the module, and the type of the custom attribute to search for.

public:
 static cli::array <Attribute ^> ^ GetCustomAttributes(System::Reflection::Module ^ element, Type ^ attributeType);
public static Attribute[] GetCustomAttributes (System.Reflection.Module element, Type attributeType);
static member GetCustomAttributes : System.Reflection.Module * Type -> Attribute[]
Public Shared Function GetCustomAttributes (element As Module, attributeType As Type) As Attribute()

パラメーター

element
Module Module Module Module

移植可能な実行可能 (PE) ファイルを記述する Module クラスから派生したオブジェクト。An object derived from the Module class that describes a portable executable file.

attributeType
Type Type Type Type

検索対象とするカスタム属性の型または基本型。The type, or a base type, of the custom attribute to search for.

戻り値

attributeType に適用された element 型のカスタム属性を格納する Attribute 配列。該当するカスタム属性が存在しない場合は空の配列。An Attribute array that contains the custom attributes of type attributeType applied to element, or an empty array if no such custom attributes exist.

例外

element または attributeTypenull です。element or attributeType is null.

attributeTypeAttribute から派生していません。attributeType is not derived from Attribute.

次のコード例は、パラメーターとして Module を取得して GetCustomAttributes を使用する方法を示しています。The following code example demonstrates the use of GetCustomAttributes, taking a Module as a parameter.

using namespace System;
using namespace System::Reflection;
using namespace System::ComponentModel;

// Assign some attributes to the module.
// Set the module's CLSCompliant attribute to false
// The CLSCompliant attribute is applicable for /target:module.
[module:Description("A sample description")];
[module:CLSCompliant(false)];
namespace CustAttrs2CS
{
   ref class DemoClass
   {
   public:
      static void Main()
      {
         Type^ clsType = DemoClass::typeid;

         // Get the Module type to access its metadata.
         Module^ module = clsType->Module;

         // Iterate through all the attributes for the module.
         System::Collections::IEnumerator^ myEnum1 = Attribute::GetCustomAttributes( module )->GetEnumerator();
         while ( myEnum1->MoveNext() )
         {
            Attribute^ attr = safe_cast<Attribute^>(myEnum1->Current);

            // Check for the Description attribute.
            if ( attr->GetType() == DescriptionAttribute::typeid )
                        Console::WriteLine( "Module {0} has the description \"{1}\".", module->Name, (dynamic_cast<DescriptionAttribute^>(attr))->Description );
            // Check for the CLSCompliant attribute.
            else

            // Check for the CLSCompliant attribute.
            if ( attr->GetType() == CLSCompliantAttribute::typeid )
                        Console::WriteLine( "Module {0} {1} CLSCompliant.", module->Name, (dynamic_cast<CLSCompliantAttribute^>(attr))->IsCompliant ? (String^)"is" : "is not" );
         }
      }
   };
}


/*
 * Output:
 * Module CustAttrs2CS.exe is not CLSCompliant.
 * Module CustAttrs2CS.exe has the description "A sample description".
 */
using System;
using System.Reflection;
using System.ComponentModel;

// Assign some attributes to the module.
[module:Description("A sample description")]

// Set the module's CLSCompliant attribute to false
// The CLSCompliant attribute is applicable for /target:module.
[module:CLSCompliant(false)]

namespace CustAttrs2CS {
    class DemoClass {
        static void Main(string[] args) {
            Type clsType = typeof(DemoClass);
            // Get the Module type to access its metadata.
            Module module = clsType.Module;

            // Iterate through all the attributes for the module.
            foreach(Attribute attr in Attribute.GetCustomAttributes(module)) {
                // Check for the Description attribute.
                if (attr.GetType() == typeof(DescriptionAttribute))
                    Console.WriteLine("Module {0} has the description " +
                        "\"{1}\".", module.Name, 
                        ((DescriptionAttribute)attr).Description);
                // Check for the CLSCompliant attribute.
                else if (attr.GetType() == typeof(CLSCompliantAttribute))
                    Console.WriteLine("Module {0} {1} CLSCompliant.",
                        module.Name,
                        ((CLSCompliantAttribute)attr).IsCompliant ? 
                            "is" : "is not");
            }
        }
    }
}

/*
 * Output:
 * Module CustAttrs2CS.exe is not CLSCompliant.
 * Module CustAttrs2CS.exe has the description "A sample description".
 */
Imports System.Reflection
Imports System.ComponentModel

' Give the Module some attributes.
<Module: Description("A sample description")> 

' Make the CLSCompliant attribute False.
' The CLSCompliant attribute is applicable for /target:module.
<Module: CLSCompliant(False)> 

Module DemoModule

    Sub Main()
        ' Get the Module type to access its metadata.
        Dim modType As Reflection.Module = GetType(DemoModule).Module
        Dim attr As Attribute
        ' Iterate through all the attributes for the module.
        For Each attr In Attribute.GetCustomAttributes(modType)
            ' Check for the Description attribute.
            If TypeOf attr Is DescriptionAttribute Then
                ' Convert the attribute to access its data.
                Dim descAttr As DescriptionAttribute = _
                    CType(attr, DescriptionAttribute)
                Console.WriteLine("Module {0} has the description ""{1}"".", _
                    modType.Name, descAttr.Description)

            ' Check for the CLSCompliant attribute.
            ElseIf TypeOf attr Is CLSCompliantAttribute Then
                ' Convert the attribute to access its data.
                Dim CLSCompAttr As CLSCompliantAttribute = _
                    CType(attr, CLSCompliantAttribute)
                Dim strCompliant As String
                If CLSCompAttr.IsCompliant Then
                    strCompliant = "is"
                Else
                    strCompliant = "is not"
                End If
                Console.WriteLine("Module {0} {1} CLSCompliant.", _
                    modType.Name, strCompliant)
            End If
        Next
    End Sub
End Module

' Output:
' Module CustAttrs2VB.exe has the description "A sample description".
' Module CustAttrs2VB.exe is not CLSCompliant.

GetCustomAttributes(ParameterInfo, Type, Boolean) GetCustomAttributes(ParameterInfo, Type, Boolean) GetCustomAttributes(ParameterInfo, Type, Boolean) GetCustomAttributes(ParameterInfo, Type, Boolean)

メソッド パラメーターに適用されたカスタム属性の配列を取得します。Retrieves an array of the custom attributes applied to a method parameter. 各パラメーターは、対象のメソッド パラメーター、検索対象のカスタム属性の型、およびそのメソッド パラメーターの先祖を検索するかどうかを指定します。Parameters specify the method parameter, the type of the custom attribute to search for, and whether to search ancestors of the method parameter.

public:
 static cli::array <Attribute ^> ^ GetCustomAttributes(System::Reflection::ParameterInfo ^ element, Type ^ attributeType, bool inherit);
public static Attribute[] GetCustomAttributes (System.Reflection.ParameterInfo element, Type attributeType, bool inherit);
static member GetCustomAttributes : System.Reflection.ParameterInfo * Type * bool -> Attribute[]
Public Shared Function GetCustomAttributes (element As ParameterInfo, attributeType As Type, inherit As Boolean) As Attribute()

パラメーター

element
ParameterInfo ParameterInfo ParameterInfo ParameterInfo

クラスのメンバーのパラメーターを記述する ParameterInfo クラスから派生したオブジェクト。An object derived from the ParameterInfo class that describes a parameter of a member of a class.

attributeType
Type Type Type Type

検索対象とするカスタム属性の型または基本型。The type, or a base type, of the custom attribute to search for.

inherit
Boolean Boolean Boolean Boolean

true の場合は、element の先祖のカスタム属性も検索することを示します。If true, specifies to also search the ancestors of element for custom attributes.

戻り値

attributeType に適用された element 型のカスタム属性を格納する Attribute 配列。該当するカスタム属性が存在しない場合は空の配列。An Attribute array that contains the custom attributes of type attributeType applied to element, or an empty array if no such custom attributes exist.

例外

element または attributeTypenull です。element or attributeType is null.

attributeTypeAttribute から派生していません。attributeType is not derived from Attribute.

カスタム属性の型を読み込むことはできません。A custom attribute type cannot be loaded.

次のコード例は、パラメーターとして ParameterInfo を取得して GetCustomAttributes を使用する方法を示しています。The following code example demonstrates the use of GetCustomAttributes, taking a ParameterInfo as a parameter.

using namespace System;
using namespace System::Reflection;
using namespace System::ComponentModel;

namespace CustAttrs5CS
{
   public ref class AClass
   {
   public:
      void ParamArrayAndDesc(
         // Add ParamArray and Description attributes.
         [Description("This argument is a ParamArray")]
         array<Int32>^args )
      {}
   };

   ref class DemoClass
   {
   public:
      static void Main()
      {
         // Get the Class type to access its metadata.
         Type^ clsType = AClass::typeid;

         // Get the type information for the method.
         MethodInfo^ mInfo = clsType->GetMethod( "ParamArrayAndDesc" );
         if ( mInfo != nullptr )
         {
            // Get the parameter information.
            array<ParameterInfo^>^pInfo = mInfo->GetParameters();
            if ( pInfo != nullptr )
            {
               // Iterate through all the attributes for the parameter.
               System::Collections::IEnumerator^ myEnum4 = Attribute::GetCustomAttributes( pInfo[ 0 ] )->GetEnumerator();
               while ( myEnum4->MoveNext() )
               {
                  Attribute^ attr = safe_cast<Attribute^>(myEnum4->Current);

                  // Check for the ParamArray attribute.
                  if ( attr->GetType() == ParamArrayAttribute::typeid )
                                    Console::WriteLine( "Parameter {0} for method {1} "
                  "has the ParamArray attribute.", pInfo[ 0 ]->Name, mInfo->Name );
                  // Check for the Description attribute.
                  else

                  // Check for the Description attribute.
                  if ( attr->GetType() == DescriptionAttribute::typeid )
                  {
                     Console::WriteLine( "Parameter {0} for method {1} "
                     "has a description attribute.", pInfo[ 0 ]->Name, mInfo->Name );
                     Console::WriteLine( "The description is: \"{0}\"", (dynamic_cast<DescriptionAttribute^>(attr))->Description );
                  }
               }
            }
         }
      }
   };
}

/*
 * Output:
 * Parameter args for method ParamArrayAndDesc has a description attribute.
 * The description is: "This argument is a ParamArray"
 * Parameter args for method ParamArrayAndDesc has the ParamArray attribute.
 */
using System;
using System.Reflection;
using System.ComponentModel;

namespace CustAttrs5CS {
    public class AClass {
        public void ParamArrayAndDesc(
            // Add ParamArray (with the keyword) and Description attributes.
            [Description("This argument is a ParamArray")]
            params int[] args)
        {}
    }

    class DemoClass {
        static void Main(string[] args) {
            // Get the Class type to access its metadata.
            Type clsType = typeof(AClass);
            // Get the type information for the method.
            MethodInfo mInfo = clsType.GetMethod("ParamArrayAndDesc");
            if (mInfo != null) {
                // Get the parameter information.
                ParameterInfo[] pInfo = mInfo.GetParameters();
                if (pInfo != null) {
                    // Iterate through all the attributes for the parameter.
                    foreach(Attribute attr in 
                        Attribute.GetCustomAttributes(pInfo[0])) {
                        // Check for the ParamArray attribute.
                        if (attr.GetType() == typeof(ParamArrayAttribute))
                            Console.WriteLine("Parameter {0} for method {1} " +
                                "has the ParamArray attribute.",
                                pInfo[0].Name, mInfo.Name);
                        // Check for the Description attribute.
                        else if (attr.GetType() == 
                            typeof(DescriptionAttribute)) {
                            Console.WriteLine("Parameter {0} for method {1} " +
                                "has a description attribute.",
                                pInfo[0].Name, mInfo.Name);
                            Console.WriteLine("The description is: \"{0}\"",
                                ((DescriptionAttribute)attr).Description);
                        }
                    }
                }
            }
        }
    }
}

/*
 * Output:
 * Parameter args for method ParamArrayAndDesc has a description attribute.
 * The description is: "This argument is a ParamArray"
 * Parameter args for method ParamArrayAndDesc has the ParamArray attribute.
 */
Imports System.Reflection
Imports System.ComponentModel

Module DemoModule
    Public Class AClass
        ' Add Description and ParamArray (with the keyword) attributes.
        Public Sub ParamArrayAndDesc( _
            <Description("This argument is a ParamArray")> _
            ByVal ParamArray args() As Integer)
        End Sub
    End Class

    Sub Main()
        ' Get the Class type to access its metadata.
        Dim clsType As Type = GetType(AClass)
        ' Get the type information for the method.
        Dim mInfo As MethodInfo = clsType.GetMethod("ParamArrayAndDesc")
        ' Get the Parameter information for the method.
        Dim pInfo() As ParameterInfo = mInfo.GetParameters()
        Dim attr As Attribute
        ' Iterate through each attribute of the parameter.
        For Each attr In Attribute.GetCustomAttributes(pInfo(0))
            ' Check for the ParamArray attribute.
            If TypeOf attr Is ParamArrayAttribute Then
                ' Convert the attribute to access its data.
                Dim paAttr As ParamArrayAttribute = _
                    CType(attr, ParamArrayAttribute)
                Console.WriteLine("Parameter {0} has the " + _
                    "ParamArray attribute.", pInfo(0).Name)
            ' Check for the Description attribute.
            ElseIf TypeOf attr Is DescriptionAttribute Then
                ' Convert the attribute to access its data.
                Dim descAttr As DescriptionAttribute = _
                    CType(attr, DescriptionAttribute)
                Console.WriteLine("Parameter {0} has a description " + _
                    "attribute. The description is:", pInfo(0).Name)
                Console.WriteLine(descAttr.Description)
            End If
        Next
    End Sub
End Module

' Output:
' Parameter args has a description attribute. The description is:
' This argument is a ParamArray
' Parameter args has the ParamArray attribute.

注釈

@No__t-0 が派生型のメソッドのパラメーターを表している場合、戻り値には、オーバーライドされた基本メソッドで同じパラメーターに適用された、継承可能なカスタム属性が含まれます。If element represents a parameter in a method of a derived type, the return value includes the inheritable custom attributes applied to the same parameter in the overridden base methods.

GetCustomAttributes(Module, Type, Boolean) GetCustomAttributes(Module, Type, Boolean) GetCustomAttributes(Module, Type, Boolean) GetCustomAttributes(Module, Type, Boolean)

モジュールに適用されたカスタム属性の配列を取得します。Retrieves an array of the custom attributes applied to a module. 各パラメーターは、対象のモジュール、検索対象のカスタム属性の型、および無視する検索オプションを指定します。Parameters specify the module, the type of the custom attribute to search for, and an ignored search option.

public:
 static cli::array <Attribute ^> ^ GetCustomAttributes(System::Reflection::Module ^ element, Type ^ attributeType, bool inherit);
public static Attribute[] GetCustomAttributes (System.Reflection.Module element, Type attributeType, bool inherit);
static member GetCustomAttributes : System.Reflection.Module * Type * bool -> Attribute[]
Public Shared Function GetCustomAttributes (element As Module, attributeType As Type, inherit As Boolean) As Attribute()

パラメーター

element
Module Module Module Module

移植可能な実行可能 (PE) ファイルを記述する Module クラスから派生したオブジェクト。An object derived from the Module class that describes a portable executable file.

attributeType
Type Type Type Type

検索対象とするカスタム属性の型または基本型。The type, or a base type, of the custom attribute to search for.

inherit
Boolean Boolean Boolean Boolean

このパラメーターは無視され、このメソッドの動作には影響しません。This parameter is ignored, and does not affect the operation of this method.

戻り値

attributeType に適用された element 型のカスタム属性を格納する Attribute 配列。該当するカスタム属性が存在しない場合は空の配列。An Attribute array that contains the custom attributes of type attributeType applied to element, or an empty array if no such custom attributes exist.

例外

element または attributeTypenull です。element or attributeType is null.

attributeTypeAttribute から派生していません。attributeType is not derived from Attribute.

次のコード例は、パラメーターとして Module を取得して GetCustomAttributes を使用する方法を示しています。The following code example demonstrates the use of GetCustomAttributes, taking a Module as a parameter.

using namespace System;
using namespace System::Reflection;
using namespace System::ComponentModel;

// Assign some attributes to the module.
// Set the module's CLSCompliant attribute to false
// The CLSCompliant attribute is applicable for /target:module.
[module:Description("A sample description")];
[module:CLSCompliant(false)];
namespace CustAttrs2CS
{
   ref class DemoClass
   {
   public:
      static void Main()
      {
         Type^ clsType = DemoClass::typeid;

         // Get the Module type to access its metadata.
         Module^ module = clsType->Module;

         // Iterate through all the attributes for the module.
         System::Collections::IEnumerator^ myEnum1 = Attribute::GetCustomAttributes( module )->GetEnumerator();
         while ( myEnum1->MoveNext() )
         {
            Attribute^ attr = safe_cast<Attribute^>(myEnum1->Current);

            // Check for the Description attribute.
            if ( attr->GetType() == DescriptionAttribute::typeid )
                        Console::WriteLine( "Module {0} has the description \"{1}\".", module->Name, (dynamic_cast<DescriptionAttribute^>(attr))->Description );
            // Check for the CLSCompliant attribute.
            else

            // Check for the CLSCompliant attribute.
            if ( attr->GetType() == CLSCompliantAttribute::typeid )
                        Console::WriteLine( "Module {0} {1} CLSCompliant.", module->Name, (dynamic_cast<CLSCompliantAttribute^>(attr))->IsCompliant ? (String^)"is" : "is not" );
         }
      }
   };
}


/*
 * Output:
 * Module CustAttrs2CS.exe is not CLSCompliant.
 * Module CustAttrs2CS.exe has the description "A sample description".
 */
using System;
using System.Reflection;
using System.ComponentModel;

// Assign some attributes to the module.
[module:Description("A sample description")]

// Set the module's CLSCompliant attribute to false
// The CLSCompliant attribute is applicable for /target:module.
[module:CLSCompliant(false)]

namespace CustAttrs2CS {
    class DemoClass {
        static void Main(string[] args) {
            Type clsType = typeof(DemoClass);
            // Get the Module type to access its metadata.
            Module module = clsType.Module;

            // Iterate through all the attributes for the module.
            foreach(Attribute attr in Attribute.GetCustomAttributes(module)) {
                // Check for the Description attribute.
                if (attr.GetType() == typeof(DescriptionAttribute))
                    Console.WriteLine("Module {0} has the description " +
                        "\"{1}\".", module.Name, 
                        ((DescriptionAttribute)attr).Description);
                // Check for the CLSCompliant attribute.
                else if (attr.GetType() == typeof(CLSCompliantAttribute))
                    Console.WriteLine("Module {0} {1} CLSCompliant.",
                        module.Name,
                        ((CLSCompliantAttribute)attr).IsCompliant ? 
                            "is" : "is not");
            }
        }
    }
}

/*
 * Output:
 * Module CustAttrs2CS.exe is not CLSCompliant.
 * Module CustAttrs2CS.exe has the description "A sample description".
 */
Imports System.Reflection
Imports System.ComponentModel

' Give the Module some attributes.
<Module: Description("A sample description")> 

' Make the CLSCompliant attribute False.
' The CLSCompliant attribute is applicable for /target:module.
<Module: CLSCompliant(False)> 

Module DemoModule

    Sub Main()
        ' Get the Module type to access its metadata.
        Dim modType As Reflection.Module = GetType(DemoModule).Module
        Dim attr As Attribute
        ' Iterate through all the attributes for the module.
        For Each attr In Attribute.GetCustomAttributes(modType)
            ' Check for the Description attribute.
            If TypeOf attr Is DescriptionAttribute Then
                ' Convert the attribute to access its data.
                Dim descAttr As DescriptionAttribute = _
                    CType(attr, DescriptionAttribute)
                Console.WriteLine("Module {0} has the description ""{1}"".", _
                    modType.Name, descAttr.Description)

            ' Check for the CLSCompliant attribute.
            ElseIf TypeOf attr Is CLSCompliantAttribute Then
                ' Convert the attribute to access its data.
                Dim CLSCompAttr As CLSCompliantAttribute = _
                    CType(attr, CLSCompliantAttribute)
                Dim strCompliant As String
                If CLSCompAttr.IsCompliant Then
                    strCompliant = "is"
                Else
                    strCompliant = "is not"
                End If
                Console.WriteLine("Module {0} {1} CLSCompliant.", _
                    modType.Name, strCompliant)
            End If
        Next
    End Sub
End Module

' Output:
' Module CustAttrs2VB.exe has the description "A sample description".
' Module CustAttrs2VB.exe is not CLSCompliant.

注釈

戻り値には @no__t の先祖のカスタム属性が含まれています。 inherittrue の場合は0です。The return value contains the custom attributes for ancestors of element if inherit is true.

GetCustomAttributes(MemberInfo, Type, Boolean) GetCustomAttributes(MemberInfo, Type, Boolean) GetCustomAttributes(MemberInfo, Type, Boolean)

型のメンバーに適用されたカスタム属性の配列を取得します。Retrieves an array of the custom attributes applied to a member of a type. 各パラメーターは、対象のメンバー、検索対象のカスタム属性の型、およびそのメンバーの先祖を検索するかどうかを指定します。Parameters specify the member, the type of the custom attribute to search for, and whether to search ancestors of the member.

public:
 static cli::array <Attribute ^> ^ GetCustomAttributes(System::Reflection::MemberInfo ^ element, Type ^ type, bool inherit);
public static Attribute[] GetCustomAttributes (System.Reflection.MemberInfo element, Type type, bool inherit);
static member GetCustomAttributes : System.Reflection.MemberInfo * Type * bool -> Attribute[]

パラメーター

element
MemberInfo MemberInfo MemberInfo MemberInfo

クラスのコンストラクター メンバー、イベント メンバー、フィールド メンバー、メソッド メンバー、またはプロパティ メンバーを記述する MemberInfo クラスから派生したオブジェクト。An object derived from the MemberInfo class that describes a constructor, event, field, method, or property member of a class.

type
Type Type Type Type

検索対象とするカスタム属性の型または基本型。The type, or a base type, of the custom attribute to search for.

inherit
Boolean Boolean Boolean Boolean

true の場合は、element の先祖のカスタム属性も検索することを示します。If true, specifies to also search the ancestors of element for custom attributes.

戻り値

type に適用された element 型のカスタム属性を格納する Attribute 配列。該当するカスタム属性が存在しない場合は空の配列。An Attribute array that contains the custom attributes of type type applied to element, or an empty array if no such custom attributes exist.

例外

element または typenull です。element or type is null.

typeAttribute から派生していません。type is not derived from Attribute.

elementがコンストラクター、メソッド、プロパティ、イベント、型、またはフィールドではありません。element is not a constructor, method, property, event, type, or field.

カスタム属性の型を読み込むことはできません。A custom attribute type cannot be loaded.

次のコード例は、パラメーターとして MemberInfo を取得して GetCustomAttributes を使用する方法を示しています。The following code example demonstrates the use of GetCustomAttributes, taking a MemberInfo as a parameter.

using namespace System;
using namespace System::Reflection;
using namespace System::Security;
using namespace System::Runtime::InteropServices;

namespace CustAttrs4CS
{
   // Create a class for Win32 imported unmanaged functions.
   public ref class Win32
   {
   public:

      [DllImport("user32.dll", CharSet = CharSet::Unicode)]
      static int MessageBox( int hWnd, String^ text, String^ caption, UInt32 type );
   };

   public ref class AClass
   {
   public:

      // Add some attributes to the Win32CallMethod.

      [Obsolete("This method is obsolete. Use managed MsgBox instead.")]
      void Win32CallMethod()
      {
         Win32::MessageBox( 0, "This is an unmanaged call.", "Be Careful!", 0 );
      }

   };

   ref class DemoClass
   {
   public:
      static void Main()
      {
         // Get the Class type to access its metadata.
         Type^ clsType = AClass::typeid;

         // Get the type information for the Win32CallMethod.
         MethodInfo^ mInfo = clsType->GetMethod( "Win32CallMethod" );
         if ( mInfo != nullptr )
         {
            // Iterate through all the attributes for the method.
            System::Collections::IEnumerator^ myEnum3 = Attribute::GetCustomAttributes( mInfo )->GetEnumerator();
            while ( myEnum3->MoveNext() )
            {
               Attribute^ attr = safe_cast<Attribute^>(myEnum3->Current);

               // Check for the Obsolete attribute.
               if ( attr->GetType() == ObsoleteAttribute::typeid )
               {
                  Console::WriteLine( "Method {0} is obsolete. "
                  "The message is:", mInfo->Name );
                  Console::WriteLine( (dynamic_cast<ObsoleteAttribute^>(attr))->Message );
               }
               // Check for the SuppressUnmanagedCodeSecurity attribute.
               else

               // Check for the SuppressUnmanagedCodeSecurity attribute.
               if ( attr->GetType() == SuppressUnmanagedCodeSecurityAttribute::typeid )
               {
                  Console::WriteLine( "This method calls unmanaged code "
                  "with no security check." );
                  Console::WriteLine( "Please do not use unless absolutely necessary." );
                  AClass^ myCls = gcnew AClass;
                  myCls->Win32CallMethod();
               }
            }
         }
      }
   };
}


/*
 * Output:
 * Method Win32CallMethod is obsolete. The message is:
 * This method is obsolete. Use managed MsgBox instead.
 * This method calls unmanaged code with no security check.
 * Please do not use unless absolutely necessary.
 */
using System;
using System.Reflection;
using System.Security;
using System.Runtime.InteropServices;

namespace CustAttrs4CS
{

    // Define an enumeration of Win32 unmanaged types
    public enum UnmanagedType
    {
        User,
        GDI,
        Kernel,
        Shell,
        Networking,
        Multimedia
    }

    // Define the Unmanaged attribute.
    public class UnmanagedAttribute : Attribute
    {
        // Storage for the UnmanagedType value.
        protected UnmanagedType thisType;

        // Set the unmanaged type in the constructor.
        public UnmanagedAttribute(UnmanagedType type)
        {
            thisType = type;
        }

        // Define a property to get and set the UnmanagedType value.
        public UnmanagedType Win32Type
        {
            get { return thisType; }
            set { thisType = Win32Type; }
        }
    }

    // Create a class for an imported Win32 unmanaged function.
    public class Win32 {
        [DllImport("user32.dll", CharSet = CharSet.Unicode)]
        public static extern int MessageBox(int hWnd, String text,
            String caption, uint type);
    }

    public class AClass {
        // Add some attributes to Win32CallMethod.
        [Obsolete("This method is obsolete. Use managed MsgBox instead.")]
        [Unmanaged(UnmanagedType.User)]
        public void Win32CallMethod()
        {
            Win32.MessageBox(0, "This is an unmanaged call.", "Caution!", 0);
        }
    }

    class DemoClass {
        static void Main(string[] args)
            {
            // Get the AClass type to access its metadata.
            Type clsType = typeof(AClass);
            // Get the type information for Win32CallMethod.
            MethodInfo mInfo = clsType.GetMethod("Win32CallMethod");
            if (mInfo != null)
            {
                // Iterate through all the attributes of the method.
                foreach(Attribute attr in
                    Attribute.GetCustomAttributes(mInfo)) {
                    // Check for the Obsolete attribute.
                    if (attr.GetType() == typeof(ObsoleteAttribute))
                    {
                        Console.WriteLine("Method {0} is obsolete. " +
                            "The message is:",
                            mInfo.Name);
                        Console.WriteLine("  \"{0}\"",
                            ((ObsoleteAttribute)attr).Message);
                    }

                    // Check for the Unmanaged attribute.
                    else if (attr.GetType() == typeof(UnmanagedAttribute))
                    {
                        Console.WriteLine(
                            "This method calls unmanaged code.");
                        Console.WriteLine(
                            String.Format("The Unmanaged attribute type is {0}.",
                                          ((UnmanagedAttribute)attr).Win32Type));
                        AClass myCls = new AClass();
                        myCls.Win32CallMethod();
                    }
                }
            }
        }
    }
}

/*

This code example produces the following results.

First, the compilation yields the warning, "...This method is
obsolete. Use managed MsgBox instead."
Second, execution yields a message box with a title of "Caution!"
and message text of "This is an unmanaged call."
Third, the following text is displayed in the console window:

Method Win32CallMethod is obsolete. The message is:
  "This method is obsolete. Use managed MsgBox instead."
This method calls unmanaged code.
The Unmanaged attribute type is User.

*/

Imports System.Reflection
Imports System.Security
Imports System.Runtime.InteropServices

' Define an enumeration of Win32 unmanaged types
Public Enum UnmanagedType
    User
    GDI
    Kernel
    Shell
    Networking
    Multimedia
End Enum 'UnmanagedType

' Define the Unmanaged attribute.
Public Class UnmanagedAttribute 
             Inherits Attribute

    ' Storage for the UnmanagedType value.
    Protected thisType As UnmanagedType
    
    ' Set the unmanaged type in the constructor.
    Public Sub New(ByVal type As UnmanagedType) 
        thisType = type
    End Sub
    
    ' Define a property to get and set the UnmanagedType value.
    Public Property Win32Type() As UnmanagedType 
        Get
            Return thisType
        End Get
        Set
            thisType = Win32Type
        End Set
    End Property
End Class

' Create a class for an imported Win32 unmanaged function.
Public Class Win32
    <DllImport("user32.dll", CharSet:=CharSet.Unicode)> _
    Public Shared Function MessageBox(ByVal hWnd As Integer, _
                                      ByVal Text As String, _
                                      ByVal caption As String, _
                                      ByVal type As Integer) As Integer
    End Function 'MessageBox
End Class

Public Class AClass
    ' Add some attributes to Win32CallMethod.
    <Obsolete("This method is obsolete. Use managed MsgBox instead."), _
     Unmanaged(UnmanagedType.User)>  _
    Public Sub Win32CallMethod() 
        Win32.MessageBox(0, "This is an unmanaged call.", "Caution!", 0)    
    End Sub
End Class

Class DemoClass
    Shared Sub Main(ByVal args() As String) 
        ' Get the AClass type to access its metadata.
        Dim clsType As Type = GetType(AClass)
        ' Get the type information for Win32CallMethod.
        Dim mInfo As MethodInfo = clsType.GetMethod("Win32CallMethod")
        If Not (mInfo Is Nothing) Then
            ' Iterate through all the attributes of the method.
            Dim attr As Attribute
            For Each attr In  Attribute.GetCustomAttributes(mInfo)
                ' Check for the Obsolete attribute.
                If attr.GetType().Equals(GetType(ObsoleteAttribute)) Then
                    Console.WriteLine("Method {0} is obsolete. The message is:", mInfo.Name)
                    Console.WriteLine("  ""{0}""", CType(attr, ObsoleteAttribute).Message)
                ' Check for the Unmanaged attribute.
                ElseIf attr.GetType().Equals(GetType(UnmanagedAttribute)) Then
                    Console.WriteLine("This method calls unmanaged code.")
                    Console.WriteLine( _
                            String.Format("The Unmanaged attribute type is {0}.", _
                            CType(attr, UnmanagedAttribute).Win32Type))
                    Dim myCls As New AClass()
                    myCls.Win32CallMethod()
                End If
            Next attr
        End If
    End Sub
End Class

'
'This code example produces the following results. 
'
'First, the compilation yields the warning, "...This method is 
'obsolete. Use managed MsgBox instead."
'Second, execution yields a message box with a title of "Caution!" 
'and message text of "This is an unmanaged call." 
'Third, the following text is displayed in the console window:
'
'Method Win32CallMethod is obsolete. The message is:
'  "This method is obsolete. Use managed MsgBox instead."
'This method calls unmanaged code.
'The Unmanaged attribute type is User.
' 

注釈

戻り値には @no__t の先祖のカスタム属性が含まれています。 inherittrue の場合は0です。The return value contains the custom attributes for ancestors of element if inherit is true.

注意

.NET Framework バージョン2.0 以降では、属性が新しいメタデータ形式で格納されている場合、このメソッドはメソッド、コンストラクター、および型のセキュリティ属性を返します。Starting with the .NET Framework version 2.0, this method returns security attributes on methods, constructors, and types if the attributes are stored in the new metadata format. バージョン2.0 以降でコンパイルされたアセンブリでは、新しい形式が使用されます。Assemblies compiled with version 2.0 or later use the new format. 以前のバージョンの .NET Framework でコンパイルされた動的アセンブリとアセンブリは、古い XML 形式を使用します。Dynamic assemblies and assemblies compiled with earlier versions of the .NET Framework use the old XML format. 宣言型セキュリティ属性の出力」を参照してください。See Emitting Declarative Security Attributes.

GetCustomAttributes(Assembly, Type, Boolean) GetCustomAttributes(Assembly, Type, Boolean) GetCustomAttributes(Assembly, Type, Boolean) GetCustomAttributes(Assembly, Type, Boolean)

アセンブリに適用されたカスタム属性の配列を取得します。Retrieves an array of the custom attributes applied to an assembly. 各パラメーターは、対象のアセンブリ、検索対象のカスタム属性の型、および無視する検索オプションを指定します。Parameters specify the assembly, the type of the custom attribute to search for, and an ignored search option.

public:
 static cli::array <Attribute ^> ^ GetCustomAttributes(System::Reflection::Assembly ^ element, Type ^ attributeType, bool inherit);
public static Attribute[] GetCustomAttributes (System.Reflection.Assembly element, Type attributeType, bool inherit);
static member GetCustomAttributes : System.Reflection.Assembly * Type * bool -> Attribute[]
Public Shared Function GetCustomAttributes (element As Assembly, attributeType As Type, inherit As Boolean) As Attribute()

パラメーター

element
Assembly Assembly Assembly Assembly

モジュールの再利用可能なコレクションを記述する Assembly クラスから派生したオブジェクト。An object derived from the Assembly class that describes a reusable collection of modules.

attributeType
Type Type Type Type

検索対象とするカスタム属性の型または基本型。The type, or a base type, of the custom attribute to search for.

inherit
Boolean Boolean Boolean Boolean

このパラメーターは無視され、このメソッドの動作には影響しません。This parameter is ignored, and does not affect the operation of this method.

戻り値

attributeType に適用された element 型のカスタム属性を格納する Attribute 配列。該当するカスタム属性が存在しない場合は空の配列。An Attribute array that contains the custom attributes of type attributeType applied to element, or an empty array if no such custom attributes exist.

例外

element または attributeTypenull です。element or attributeType is null.

attributeTypeAttribute から派生していません。attributeType is not derived from Attribute.

次のコード例は、パラメーターとして Assembly を受け取る GetCustomAttributes の使用方法を示しています。The following code example demonstrates the use of GetCustomAttributes, taking an Assembly as a parameter.

using namespace System;
using namespace System::Reflection;

[assembly:AssemblyTitle("CustAttrs1CPP")];
[assembly:AssemblyDescription("GetCustomAttributes() Demo")];
[assembly:AssemblyCompany("Microsoft")];

ref class Example
{};

static void main()
{
    Type^ clsType = Example::typeid;

    // Get the Assembly type to access its metadata.
    Assembly^ assy = clsType->Assembly;

    // Iterate through the attributes for the assembly.
    System::Collections::IEnumerator^ myEnum = Attribute::GetCustomAttributes( assy )->GetEnumerator();
    while ( myEnum->MoveNext() )
    {
       Attribute^ attr = safe_cast<Attribute^>(myEnum->Current);

       // Check for the AssemblyTitle attribute.
       if ( attr->GetType() == AssemblyTitleAttribute::typeid )
          Console::WriteLine( "Assembly title is \"{0}\".", (dynamic_cast<AssemblyTitleAttribute^>(attr))->Title );
          // Check for the AssemblyDescription attribute.
       else
          // Check for the AssemblyDescription attribute.
          if ( attr->GetType() == AssemblyDescriptionAttribute::typeid )
             Console::WriteLine( "Assembly description is \"{0}\".", (dynamic_cast<AssemblyDescriptionAttribute^>(attr))->Description );
          // Check for the AssemblyCompany attribute.
          else if ( attr->GetType() == AssemblyCompanyAttribute::typeid )
             Console::WriteLine( "Assembly company is {0}.", (dynamic_cast<AssemblyCompanyAttribute^>(attr))->Company );
    }
}
// The example displays the following output:
//     Assembly description is "GetCustomAttributes() Demo".
//     Assembly company is Microsoft.
//     Assembly title is "CustAttrs1CPP".
using System;
using System.Reflection;

[assembly: AssemblyTitle("CustAttrs1CS")]
[assembly: AssemblyDescription("GetCustomAttributes() Demo")]
[assembly: AssemblyCompany("Microsoft")]

class Example {
    static void Main() {
        // Get the Assembly object to access its metadata.
        Assembly assy = typeof(Example).Assembly;

        // Iterate through the attributes for the assembly.
        foreach(Attribute attr in Attribute.GetCustomAttributes(assy)) {
            // Check for the AssemblyTitle attribute.
            if (attr.GetType() == typeof(AssemblyTitleAttribute))
                Console.WriteLine("Assembly title is \"{0}\".",
                    ((AssemblyTitleAttribute)attr).Title);

            // Check for the AssemblyDescription attribute.
            else if (attr.GetType() == 
                typeof(AssemblyDescriptionAttribute))
                Console.WriteLine("Assembly description is \"{0}\".",
                    ((AssemblyDescriptionAttribute)attr).Description);

            // Check for the AssemblyCompany attribute.
            else if (attr.GetType() == typeof(AssemblyCompanyAttribute))
                Console.WriteLine("Assembly company is {0}.",
                    ((AssemblyCompanyAttribute)attr).Company);
        }
   }
}
// The example displays the following output:
//     Assembly title is "CustAttrs1CS".
//     Assembly description is "GetCustomAttributes() Demo".
//     Assembly company is Microsoft.
Imports System.Reflection

<Assembly: AssemblyTitle("CustAttrs1VB")> 
<Assembly: AssemblyDescription("GetCustomAttributes() Demo")> 
<Assembly: AssemblyCompany("Microsoft")> 

Module Example
    Sub Main()
        ' Get the Assembly type to access its metadata.
        Dim assy As Reflection.Assembly = GetType(Example).Assembly

        ' Iterate through all the attributes for the assembly.
        For Each attr As Attribute In Attribute.GetCustomAttributes(assy)
            ' Check for the AssemblyTitle attribute.
            If TypeOf attr Is AssemblyTitleAttribute Then
                ' Convert the attribute to access its data.
                Dim attrTitle As AssemblyTitleAttribute = _
                    CType(attr, AssemblyTitleAttribute)
                Console.WriteLine("Assembly title is ""{0}"".", _
                    attrTitle.Title)

            ' Check for the AssemblyDescription attribute.
            ElseIf TypeOf attr Is AssemblyDescriptionAttribute Then
                ' Convert the attribute to access its data.
                Dim attrDesc As AssemblyDescriptionAttribute = _
                    CType(attr, AssemblyDescriptionAttribute)
                Console.WriteLine("Assembly description is ""{0}"".", _
                    attrDesc.Description)

            ' Check for the AssemblyCompany attribute.
            ElseIf TypeOf attr Is AssemblyCompanyAttribute Then
                ' Convert the attribute to access its data.
                Dim attrComp As AssemblyCompanyAttribute = _
                    CType(attr, AssemblyCompanyAttribute)
                Console.WriteLine("Assembly company is {0}.", _
                    attrComp.Company)
            End If
        Next
    End Sub
End Module
' The example displays the following output:
'     Assembly company is Microsoft.
'     Assembly description is "GetCustomAttributes() Demo".
'     Assembly title is "CustAttrs1VB".

注釈

注意

.NET Framework バージョン2.0 以降では、属性が新しいメタデータ形式で格納されている場合、このメソッドはセキュリティ属性を返します。Starting with the .NET Framework version 2.0, this method returns security attributes if the attributes are stored in the new metadata format. バージョン2.0 以降でコンパイルされたアセンブリでは、新しい形式が使用されます。Assemblies compiled with version 2.0 or later use the new format. 以前のバージョンの .NET Framework でコンパイルされた動的アセンブリとアセンブリは、古い XML 形式を使用します。Dynamic assemblies and assemblies compiled with earlier versions of the .NET Framework use the old XML format. 宣言型セキュリティ属性の出力」を参照してください。See Emitting Declarative Security Attributes.

GetCustomAttributes(ParameterInfo, Type) GetCustomAttributes(ParameterInfo, Type) GetCustomAttributes(ParameterInfo, Type) GetCustomAttributes(ParameterInfo, Type)

メソッド パラメーターに適用されたカスタム属性の配列を取得します。Retrieves an array of the custom attributes applied to a method parameter. 各パラメーターは、対象のメソッド パラメーターと検索対象のカスタム属性の型を指定します。Parameters specify the method parameter, and the type of the custom attribute to search for.

public:
 static cli::array <Attribute ^> ^ GetCustomAttributes(System::Reflection::ParameterInfo ^ element, Type ^ attributeType);
public static Attribute[] GetCustomAttributes (System.Reflection.ParameterInfo element, Type attributeType);
static member GetCustomAttributes : System.Reflection.ParameterInfo * Type -> Attribute[]
Public Shared Function GetCustomAttributes (element As ParameterInfo, attributeType As Type) As Attribute()

パラメーター

element
ParameterInfo ParameterInfo ParameterInfo ParameterInfo

クラスのメンバーのパラメーターを記述する ParameterInfo クラスから派生したオブジェクト。An object derived from the ParameterInfo class that describes a parameter of a member of a class.

attributeType
Type Type Type Type

検索対象とするカスタム属性の型または基本型。The type, or a base type, of the custom attribute to search for.

戻り値

attributeType に適用された element 型のカスタム属性を格納する Attribute 配列。該当するカスタム属性が存在しない場合は空の配列。An Attribute array that contains the custom attributes of type attributeType applied to element, or an empty array if no such custom attributes exist.

例外

element または attributeTypenull です。element or attributeType is null.

attributeTypeAttribute から派生していません。attributeType is not derived from Attribute.

カスタム属性の型を読み込むことはできません。A custom attribute type cannot be loaded.

次のコード例は、パラメーターとして ParameterInfo を取得して GetCustomAttributes を使用する方法を示しています。The following code example demonstrates the use of GetCustomAttributes, taking a ParameterInfo as a parameter.

using namespace System;
using namespace System::Reflection;
using namespace System::ComponentModel;

namespace CustAttrs5CS
{
   public ref class AClass
   {
   public:
      void ParamArrayAndDesc(
         // Add ParamArray and Description attributes.
         [Description("This argument is a ParamArray")]
         array<Int32>^args )
      {}
   };

   ref class DemoClass
   {
   public:
      static void Main()
      {
         // Get the Class type to access its metadata.
         Type^ clsType = AClass::typeid;

         // Get the type information for the method.
         MethodInfo^ mInfo = clsType->GetMethod( "ParamArrayAndDesc" );
         if ( mInfo != nullptr )
         {
            // Get the parameter information.
            array<ParameterInfo^>^pInfo = mInfo->GetParameters();
            if ( pInfo != nullptr )
            {
               // Iterate through all the attributes for the parameter.
               System::Collections::IEnumerator^ myEnum4 = Attribute::GetCustomAttributes( pInfo[ 0 ] )->GetEnumerator();
               while ( myEnum4->MoveNext() )
               {
                  Attribute^ attr = safe_cast<Attribute^>(myEnum4->Current);

                  // Check for the ParamArray attribute.
                  if ( attr->GetType() == ParamArrayAttribute::typeid )
                                    Console::WriteLine( "Parameter {0} for method {1} "
                  "has the ParamArray attribute.", pInfo[ 0 ]->Name, mInfo->Name );
                  // Check for the Description attribute.
                  else

                  // Check for the Description attribute.
                  if ( attr->GetType() == DescriptionAttribute::typeid )
                  {
                     Console::WriteLine( "Parameter {0} for method {1} "
                     "has a description attribute.", pInfo[ 0 ]->Name, mInfo->Name );
                     Console::WriteLine( "The description is: \"{0}\"", (dynamic_cast<DescriptionAttribute^>(attr))->Description );
                  }
               }
            }
         }
      }
   };
}

/*
 * Output:
 * Parameter args for method ParamArrayAndDesc has a description attribute.
 * The description is: "This argument is a ParamArray"
 * Parameter args for method ParamArrayAndDesc has the ParamArray attribute.
 */
using System;
using System.Reflection;
using System.ComponentModel;

namespace CustAttrs5CS {
    public class AClass {
        public void ParamArrayAndDesc(
            // Add ParamArray (with the keyword) and Description attributes.
            [Description("This argument is a ParamArray")]
            params int[] args)
        {}
    }

    class DemoClass {
        static void Main(string[] args) {
            // Get the Class type to access its metadata.
            Type clsType = typeof(AClass);
            // Get the type information for the method.
            MethodInfo mInfo = clsType.GetMethod("ParamArrayAndDesc");
            if (mInfo != null) {
                // Get the parameter information.
                ParameterInfo[] pInfo = mInfo.GetParameters();
                if (pInfo != null) {
                    // Iterate through all the attributes for the parameter.
                    foreach(Attribute attr in 
                        Attribute.GetCustomAttributes(pInfo[0])) {
                        // Check for the ParamArray attribute.
                        if (attr.GetType() == typeof(ParamArrayAttribute))
                            Console.WriteLine("Parameter {0} for method {1} " +
                                "has the ParamArray attribute.",
                                pInfo[0].Name, mInfo.Name);
                        // Check for the Description attribute.
                        else if (attr.GetType() == 
                            typeof(DescriptionAttribute)) {
                            Console.WriteLine("Parameter {0} for method {1} " +
                                "has a description attribute.",
                                pInfo[0].Name, mInfo.Name);
                            Console.WriteLine("The description is: \"{0}\"",
                                ((DescriptionAttribute)attr).Description);
                        }
                    }
                }
            }
        }
    }
}

/*
 * Output:
 * Parameter args for method ParamArrayAndDesc has a description attribute.
 * The description is: "This argument is a ParamArray"
 * Parameter args for method ParamArrayAndDesc has the ParamArray attribute.
 */
Imports System.Reflection
Imports System.ComponentModel

Module DemoModule
    Public Class AClass
        ' Add Description and ParamArray (with the keyword) attributes.
        Public Sub ParamArrayAndDesc( _
            <Description("This argument is a ParamArray")> _
            ByVal ParamArray args() As Integer)
        End Sub
    End Class

    Sub Main()
        ' Get the Class type to access its metadata.
        Dim clsType As Type = GetType(AClass)
        ' Get the type information for the method.
        Dim mInfo As MethodInfo = clsType.GetMethod("ParamArrayAndDesc")
        ' Get the Parameter information for the method.
        Dim pInfo() As ParameterInfo = mInfo.GetParameters()
        Dim attr As Attribute
        ' Iterate through each attribute of the parameter.
        For Each attr In Attribute.GetCustomAttributes(pInfo(0))
            ' Check for the ParamArray attribute.
            If TypeOf attr Is ParamArrayAttribute Then
                ' Convert the attribute to access its data.
                Dim paAttr As ParamArrayAttribute = _
                    CType(attr, ParamArrayAttribute)
                Console.WriteLine("Parameter {0} has the " + _
                    "ParamArray attribute.", pInfo(0).Name)
            ' Check for the Description attribute.
            ElseIf TypeOf attr Is DescriptionAttribute Then
                ' Convert the attribute to access its data.
                Dim descAttr As DescriptionAttribute = _
                    CType(attr, DescriptionAttribute)
                Console.WriteLine("Parameter {0} has a description " + _
                    "attribute. The description is:", pInfo(0).Name)
                Console.WriteLine(descAttr.Description)
            End If
        Next
    End Sub
End Module

' Output:
' Parameter args has a description attribute. The description is:
' This argument is a ParamArray
' Parameter args has the ParamArray attribute.

注釈

@No__t-0 が派生型のメソッドのパラメーターを表している場合、戻り値には、オーバーライドされた基本メソッドで同じパラメーターに適用された、継承可能なカスタム属性が含まれます。If element represents a parameter in a method of a derived type, the return value includes the inheritable custom attributes applied to the same parameter in the overridden base methods.

GetCustomAttributes(Module, Boolean) GetCustomAttributes(Module, Boolean) GetCustomAttributes(Module, Boolean) GetCustomAttributes(Module, Boolean)

モジュールに適用されたカスタム属性の配列を取得します。Retrieves an array of the custom attributes applied to a module. 各パラメーターは、対象のモジュールと無視する検索オプションを指定します。Parameters specify the module, and an ignored search option.

public:
 static cli::array <Attribute ^> ^ GetCustomAttributes(System::Reflection::Module ^ element, bool inherit);
public static Attribute[] GetCustomAttributes (System.Reflection.Module element, bool inherit);
static member GetCustomAttributes : System.Reflection.Module * bool -> Attribute[]
Public Shared Function GetCustomAttributes (element As Module, inherit As Boolean) As Attribute()

パラメーター

element
Module Module Module Module

移植可能な実行可能 (PE) ファイルを記述する Module クラスから派生したオブジェクト。An object derived from the Module class that describes a portable executable file.

inherit
Boolean Boolean Boolean Boolean

このパラメーターは無視され、このメソッドの動作には影響しません。This parameter is ignored, and does not affect the operation of this method.

戻り値

element に適用されたカスタム属性を格納する Attribute 配列。そのようなカスタム属性が存在しない場合は空の配列。An Attribute array that contains the custom attributes applied to element, or an empty array if no such custom attributes exist.

例外

element または attributeTypenull です。element or attributeType is null.

次のコード例は、パラメーターとして Module を取得して GetCustomAttributes を使用する方法を示しています。The following code example demonstrates the use of GetCustomAttributes, taking a Module as a parameter.

using namespace System;
using namespace System::Reflection;
using namespace System::ComponentModel;

// Assign some attributes to the module.
// Set the module's CLSCompliant attribute to false
// The CLSCompliant attribute is applicable for /target:module.
[module:Description("A sample description")];
[module:CLSCompliant(false)];
namespace CustAttrs2CS
{
   ref class DemoClass
   {
   public:
      static void Main()
      {
         Type^ clsType = DemoClass::typeid;

         // Get the Module type to access its metadata.
         Module^ module = clsType->Module;

         // Iterate through all the attributes for the module.
         System::Collections::IEnumerator^ myEnum1 = Attribute::GetCustomAttributes( module )->GetEnumerator();
         while ( myEnum1->MoveNext() )
         {
            Attribute^ attr = safe_cast<Attribute^>(myEnum1->Current);

            // Check for the Description attribute.
            if ( attr->GetType() == DescriptionAttribute::typeid )
                        Console::WriteLine( "Module {0} has the description \"{1}\".", module->Name, (dynamic_cast<DescriptionAttribute^>(attr))->Description );
            // Check for the CLSCompliant attribute.
            else

            // Check for the CLSCompliant attribute.
            if ( attr->GetType() == CLSCompliantAttribute::typeid )
                        Console::WriteLine( "Module {0} {1} CLSCompliant.", module->Name, (dynamic_cast<CLSCompliantAttribute^>(attr))->IsCompliant ? (String^)"is" : "is not" );
         }
      }
   };
}


/*
 * Output:
 * Module CustAttrs2CS.exe is not CLSCompliant.
 * Module CustAttrs2CS.exe has the description "A sample description".
 */
using System;
using System.Reflection;
using System.ComponentModel;

// Assign some attributes to the module.
[module:Description("A sample description")]

// Set the module's CLSCompliant attribute to false
// The CLSCompliant attribute is applicable for /target:module.
[module:CLSCompliant(false)]

namespace CustAttrs2CS {
    class DemoClass {
        static void Main(string[] args) {
            Type clsType = typeof(DemoClass);
            // Get the Module type to access its metadata.
            Module module = clsType.Module;

            // Iterate through all the attributes for the module.
            foreach(Attribute attr in Attribute.GetCustomAttributes(module)) {
                // Check for the Description attribute.
                if (attr.GetType() == typeof(DescriptionAttribute))
                    Console.WriteLine("Module {0} has the description " +
                        "\"{1}\".", module.Name, 
                        ((DescriptionAttribute)attr).Description);
                // Check for the CLSCompliant attribute.
                else if (attr.GetType() == typeof(CLSCompliantAttribute))
                    Console.WriteLine("Module {0} {1} CLSCompliant.",
                        module.Name,
                        ((CLSCompliantAttribute)attr).IsCompliant ? 
                            "is" : "is not");
            }
        }
    }
}

/*
 * Output:
 * Module CustAttrs2CS.exe is not CLSCompliant.
 * Module CustAttrs2CS.exe has the description "A sample description".
 */
Imports System.Reflection
Imports System.ComponentModel

' Give the Module some attributes.
<Module: Description("A sample description")> 

' Make the CLSCompliant attribute False.
' The CLSCompliant attribute is applicable for /target:module.
<Module: CLSCompliant(False)> 

Module DemoModule

    Sub Main()
        ' Get the Module type to access its metadata.
        Dim modType As Reflection.Module = GetType(DemoModule).Module
        Dim attr As Attribute
        ' Iterate through all the attributes for the module.
        For Each attr In Attribute.GetCustomAttributes(modType)
            ' Check for the Description attribute.
            If TypeOf attr Is DescriptionAttribute Then
                ' Convert the attribute to access its data.
                Dim descAttr As DescriptionAttribute = _
                    CType(attr, DescriptionAttribute)
                Console.WriteLine("Module {0} has the description ""{1}"".", _
                    modType.Name, descAttr.Description)

            ' Check for the CLSCompliant attribute.
            ElseIf TypeOf attr Is CLSCompliantAttribute Then
                ' Convert the attribute to access its data.
                Dim CLSCompAttr As CLSCompliantAttribute = _
                    CType(attr, CLSCompliantAttribute)
                Dim strCompliant As String
                If CLSCompAttr.IsCompliant Then
                    strCompliant = "is"
                Else
                    strCompliant = "is not"
                End If
                Console.WriteLine("Module {0} {1} CLSCompliant.", _
                    modType.Name, strCompliant)
            End If
        Next
    End Sub
End Module

' Output:
' Module CustAttrs2VB.exe has the description "A sample description".
' Module CustAttrs2VB.exe is not CLSCompliant.

注釈

戻り値には @no__t の先祖のカスタム属性が含まれています。 inherittrue の場合は0です。The return value contains the custom attributes for ancestors of element if inherit is true.

GetCustomAttributes(ParameterInfo, Boolean) GetCustomAttributes(ParameterInfo, Boolean) GetCustomAttributes(ParameterInfo, Boolean) GetCustomAttributes(ParameterInfo, Boolean)

メソッド パラメーターに適用されたカスタム属性の配列を取得します。Retrieves an array of the custom attributes applied to a method parameter. 各パラメーターは、対象のメソッド パラメーターと、メソッド パラメーターの先祖を検索するかどうかを指定します。Parameters specify the method parameter, and whether to search ancestors of the method parameter.

public:
 static cli::array <Attribute ^> ^ GetCustomAttributes(System::Reflection::ParameterInfo ^ element, bool inherit);
public static Attribute[] GetCustomAttributes (System.Reflection.ParameterInfo element, bool inherit);
static member GetCustomAttributes : System.Reflection.ParameterInfo * bool -> Attribute[]
Public Shared Function GetCustomAttributes (element As ParameterInfo, inherit As Boolean) As Attribute()

パラメーター

element
ParameterInfo ParameterInfo ParameterInfo ParameterInfo

クラスのメンバーのパラメーターを記述する ParameterInfo クラスから派生したオブジェクト。An object derived from the ParameterInfo class that describes a parameter of a member of a class.

inherit
Boolean Boolean Boolean Boolean

true の場合は、element の先祖のカスタム属性も検索することを示します。If true, specifies to also search the ancestors of element for custom attributes.

戻り値

element に適用されたカスタム属性を格納する Attribute 配列。そのようなカスタム属性が存在しない場合は空の配列。An Attribute array that contains the custom attributes applied to element, or an empty array if no such custom attributes exist.

例外

elementMember プロパティが null です。The Member property of element is null.

カスタム属性の型を読み込むことはできません。A custom attribute type cannot be loaded.

次のコード例は、パラメーターとして ParameterInfo を取得して GetCustomAttributes を使用する方法を示しています。The following code example demonstrates the use of GetCustomAttributes, taking a ParameterInfo as a parameter.

using namespace System;
using namespace System::Reflection;
using namespace System::ComponentModel;

namespace CustAttrs5CS
{
   public ref class AClass
   {
   public:
      void ParamArrayAndDesc(
         // Add ParamArray and Description attributes.
         [Description("This argument is a ParamArray")]
         array<Int32>^args )
      {}
   };

   ref class DemoClass
   {
   public:
      static void Main()
      {
         // Get the Class type to access its metadata.
         Type^ clsType = AClass::typeid;

         // Get the type information for the method.
         MethodInfo^ mInfo = clsType->GetMethod( "ParamArrayAndDesc" );
         if ( mInfo != nullptr )
         {
            // Get the parameter information.
            array<ParameterInfo^>^pInfo = mInfo->GetParameters();
            if ( pInfo != nullptr )
            {
               // Iterate through all the attributes for the parameter.
               System::Collections::IEnumerator^ myEnum4 = Attribute::GetCustomAttributes( pInfo[ 0 ] )->GetEnumerator();
               while ( myEnum4->MoveNext() )
               {
                  Attribute^ attr = safe_cast<Attribute^>(myEnum4->Current);

                  // Check for the ParamArray attribute.
                  if ( attr->GetType() == ParamArrayAttribute::typeid )
                                    Console::WriteLine( "Parameter {0} for method {1} "
                  "has the ParamArray attribute.", pInfo[ 0 ]->Name, mInfo->Name );
                  // Check for the Description attribute.
                  else

                  // Check for the Description attribute.
                  if ( attr->GetType() == DescriptionAttribute::typeid )
                  {
                     Console::WriteLine( "Parameter {0} for method {1} "
                     "has a description attribute.", pInfo[ 0 ]->Name, mInfo->Name );
                     Console::WriteLine( "The description is: \"{0}\"", (dynamic_cast<DescriptionAttribute^>(attr))->Description );
                  }
               }
            }
         }
      }
   };
}

/*
 * Output:
 * Parameter args for method ParamArrayAndDesc has a description attribute.
 * The description is: "This argument is a ParamArray"
 * Parameter args for method ParamArrayAndDesc has the ParamArray attribute.
 */
using System;
using System.Reflection;
using System.ComponentModel;

namespace CustAttrs5CS {
    public class AClass {
        public void ParamArrayAndDesc(
            // Add ParamArray (with the keyword) and Description attributes.
            [Description("This argument is a ParamArray")]
            params int[] args)
        {}
    }

    class DemoClass {
        static void Main(string[] args) {
            // Get the Class type to access its metadata.
            Type clsType = typeof(AClass);
            // Get the type information for the method.
            MethodInfo mInfo = clsType.GetMethod("ParamArrayAndDesc");
            if (mInfo != null) {
                // Get the parameter information.
                ParameterInfo[] pInfo = mInfo.GetParameters();
                if (pInfo != null) {
                    // Iterate through all the attributes for the parameter.
                    foreach(Attribute attr in 
                        Attribute.GetCustomAttributes(pInfo[0])) {
                        // Check for the ParamArray attribute.
                        if (attr.GetType() == typeof(ParamArrayAttribute))
                            Console.WriteLine("Parameter {0} for method {1} " +
                                "has the ParamArray attribute.",
                                pInfo[0].Name, mInfo.Name);
                        // Check for the Description attribute.
                        else if (attr.GetType() == 
                            typeof(DescriptionAttribute)) {
                            Console.WriteLine("Parameter {0} for method {1} " +
                                "has a description attribute.",
                                pInfo[0].Name, mInfo.Name);
                            Console.WriteLine("The description is: \"{0}\"",
                                ((DescriptionAttribute)attr).Description);
                        }
                    }
                }
            }
        }
    }
}

/*
 * Output:
 * Parameter args for method ParamArrayAndDesc has a description attribute.
 * The description is: "This argument is a ParamArray"
 * Parameter args for method ParamArrayAndDesc has the ParamArray attribute.
 */
Imports System.Reflection
Imports System.ComponentModel

Module DemoModule
    Public Class AClass
        ' Add Description and ParamArray (with the keyword) attributes.
        Public Sub ParamArrayAndDesc( _
            <Description("This argument is a ParamArray")> _
            ByVal ParamArray args() As Integer)
        End Sub
    End Class

    Sub Main()
        ' Get the Class type to access its metadata.
        Dim clsType As Type = GetType(AClass)
        ' Get the type information for the method.
        Dim mInfo As MethodInfo = clsType.GetMethod("ParamArrayAndDesc")
        ' Get the Parameter information for the method.
        Dim pInfo() As ParameterInfo = mInfo.GetParameters()
        Dim attr As Attribute
        ' Iterate through each attribute of the parameter.
        For Each attr In Attribute.GetCustomAttributes(pInfo(0))
            ' Check for the ParamArray attribute.
            If TypeOf attr Is ParamArrayAttribute Then
                ' Convert the attribute to access its data.
                Dim paAttr As ParamArrayAttribute = _
                    CType(attr, ParamArrayAttribute)
                Console.WriteLine("Parameter {0} has the " + _
                    "ParamArray attribute.", pInfo(0).Name)
            ' Check for the Description attribute.
            ElseIf TypeOf attr Is DescriptionAttribute Then
                ' Convert the attribute to access its data.
                Dim descAttr As DescriptionAttribute = _
                    CType(attr, DescriptionAttribute)
                Console.WriteLine("Parameter {0} has a description " + _
                    "attribute. The description is:", pInfo(0).Name)
                Console.WriteLine(descAttr.Description)
            End If
        Next
    End Sub
End Module

' Output:
' Parameter args has a description attribute. The description is:
' This argument is a ParamArray
' Parameter args has the ParamArray attribute.

注釈

@No__t-0 が派生型のメソッドのパラメーターを表している場合、戻り値には、オーバーライドされた基本メソッドで同じパラメーターに適用された、継承可能なカスタム属性が含まれます。If element represents a parameter in a method of a derived type, the return value includes the inheritable custom attributes applied to the same parameter in the overridden base methods.

GetCustomAttributes(MemberInfo, Boolean) GetCustomAttributes(MemberInfo, Boolean) GetCustomAttributes(MemberInfo, Boolean) GetCustomAttributes(MemberInfo, Boolean)

型のメンバーに適用されたカスタム属性の配列を取得します。Retrieves an array of the custom attributes applied to a member of a type. 各パラメーターは、対象のメンバー、検索対象のカスタム属性の型、およびそのメンバーの先祖を検索するかどうかを指定します。Parameters specify the member, the type of the custom attribute to search for, and whether to search ancestors of the member.

public:
 static cli::array <Attribute ^> ^ GetCustomAttributes(System::Reflection::MemberInfo ^ element, bool inherit);
public static Attribute[] GetCustomAttributes (System.Reflection.MemberInfo element, bool inherit);
static member GetCustomAttributes : System.Reflection.MemberInfo * bool -> Attribute[]
Public Shared Function GetCustomAttributes (element As MemberInfo, inherit As Boolean) As Attribute()

パラメーター

element
MemberInfo MemberInfo MemberInfo MemberInfo

クラスのコンストラクター メンバー、イベント メンバー、フィールド メンバー、メソッド メンバー、またはプロパティ メンバーを記述する MemberInfo クラスから派生したオブジェクト。An object derived from the MemberInfo class that describes a constructor, event, field, method, or property member of a class.

inherit
Boolean Boolean Boolean Boolean

true の場合は、element の先祖のカスタム属性も検索することを示します。If true, specifies to also search the ancestors of element for custom attributes.

戻り値

element に適用されたカスタム属性を格納する Attribute 配列。そのようなカスタム属性が存在しない場合は空の配列。An Attribute array that contains the custom attributes applied to element, or an empty array if no such custom attributes exist.

例外

elementがコンストラクター、メソッド、プロパティ、イベント、型、またはフィールドではありません。element is not a constructor, method, property, event, type, or field.

カスタム属性の型を読み込むことはできません。A custom attribute type cannot be loaded.

次のコード例は、パラメーターとして MemberInfo を取得して GetCustomAttributes を使用する方法を示しています。The following code example demonstrates the use of GetCustomAttributes, taking a MemberInfo as a parameter.

using namespace System;
using namespace System::Reflection;
using namespace System::Security;
using namespace System::Runtime::InteropServices;

namespace CustAttrs4CS
{
   // Create a class for Win32 imported unmanaged functions.
   public ref class Win32
   {
   public:

      [DllImport("user32.dll", CharSet = CharSet::Unicode)]
      static int MessageBox( int hWnd, String^ text, String^ caption, UInt32 type );
   };

   public ref class AClass
   {
   public:

      // Add some attributes to the Win32CallMethod.

      [Obsolete("This method is obsolete. Use managed MsgBox instead.")]
      void Win32CallMethod()
      {
         Win32::MessageBox( 0, "This is an unmanaged call.", "Be Careful!", 0 );
      }

   };

   ref class DemoClass
   {
   public:
      static void Main()
      {
         // Get the Class type to access its metadata.
         Type^ clsType = AClass::typeid;

         // Get the type information for the Win32CallMethod.
         MethodInfo^ mInfo = clsType->GetMethod( "Win32CallMethod" );
         if ( mInfo != nullptr )
         {
            // Iterate through all the attributes for the method.
            System::Collections::IEnumerator^ myEnum3 = Attribute::GetCustomAttributes( mInfo )->GetEnumerator();
            while ( myEnum3->MoveNext() )
            {
               Attribute^ attr = safe_cast<Attribute^>(myEnum3->Current);

               // Check for the Obsolete attribute.
               if ( attr->GetType() == ObsoleteAttribute::typeid )
               {
                  Console::WriteLine( "Method {0} is obsolete. "
                  "The message is:", mInfo->Name );
                  Console::WriteLine( (dynamic_cast<ObsoleteAttribute^>(attr))->Message );
               }
               // Check for the SuppressUnmanagedCodeSecurity attribute.
               else

               // Check for the SuppressUnmanagedCodeSecurity attribute.
               if ( attr->GetType() == SuppressUnmanagedCodeSecurityAttribute::typeid )
               {
                  Console::WriteLine( "This method calls unmanaged code "
                  "with no security check." );
                  Console::WriteLine( "Please do not use unless absolutely necessary." );
                  AClass^ myCls = gcnew AClass;
                  myCls->Win32CallMethod();
               }
            }
         }
      }
   };
}


/*
 * Output:
 * Method Win32CallMethod is obsolete. The message is:
 * This method is obsolete. Use managed MsgBox instead.
 * This method calls unmanaged code with no security check.
 * Please do not use unless absolutely necessary.
 */
using System;
using System.Reflection;
using System.Security;
using System.Runtime.InteropServices;

namespace CustAttrs4CS
{

    // Define an enumeration of Win32 unmanaged types
    public enum UnmanagedType
    {
        User,
        GDI,
        Kernel,
        Shell,
        Networking,
        Multimedia
    }

    // Define the Unmanaged attribute.
    public class UnmanagedAttribute : Attribute
    {
        // Storage for the UnmanagedType value.
        protected UnmanagedType thisType;

        // Set the unmanaged type in the constructor.
        public UnmanagedAttribute(UnmanagedType type)
        {
            thisType = type;
        }

        // Define a property to get and set the UnmanagedType value.
        public UnmanagedType Win32Type
        {
            get { return thisType; }
            set { thisType = Win32Type; }
        }
    }

    // Create a class for an imported Win32 unmanaged function.
    public class Win32 {
        [DllImport("user32.dll", CharSet = CharSet.Unicode)]
        public static extern int MessageBox(int hWnd, String text,
            String caption, uint type);
    }

    public class AClass {
        // Add some attributes to Win32CallMethod.
        [Obsolete("This method is obsolete. Use managed MsgBox instead.")]
        [Unmanaged(UnmanagedType.User)]
        public void Win32CallMethod()
        {
            Win32.MessageBox(0, "This is an unmanaged call.", "Caution!", 0);
        }
    }

    class DemoClass {
        static void Main(string[] args)
            {
            // Get the AClass type to access its metadata.
            Type clsType = typeof(AClass);
            // Get the type information for Win32CallMethod.
            MethodInfo mInfo = clsType.GetMethod("Win32CallMethod");
            if (mInfo != null)
            {
                // Iterate through all the attributes of the method.
                foreach(Attribute attr in
                    Attribute.GetCustomAttributes(mInfo)) {
                    // Check for the Obsolete attribute.
                    if (attr.GetType() == typeof(ObsoleteAttribute))
                    {
                        Console.WriteLine("Method {0} is obsolete. " +
                            "The message is:",
                            mInfo.Name);
                        Console.WriteLine("  \"{0}\"",
                            ((ObsoleteAttribute)attr).Message);
                    }

                    // Check for the Unmanaged attribute.
                    else if (attr.GetType() == typeof(UnmanagedAttribute))
                    {
                        Console.WriteLine(
                            "This method calls unmanaged code.");
                        Console.WriteLine(
                            String.Format("The Unmanaged attribute type is {0}.",
                                          ((UnmanagedAttribute)attr).Win32Type));
                        AClass myCls = new AClass();
                        myCls.Win32CallMethod();
                    }
                }
            }
        }
    }
}

/*

This code example produces the following results.

First, the compilation yields the warning, "...This method is
obsolete. Use managed MsgBox instead."
Second, execution yields a message box with a title of "Caution!"
and message text of "This is an unmanaged call."
Third, the following text is displayed in the console window:

Method Win32CallMethod is obsolete. The message is:
  "This method is obsolete. Use managed MsgBox instead."
This method calls unmanaged code.
The Unmanaged attribute type is User.

*/

Imports System.Reflection
Imports System.Security
Imports System.Runtime.InteropServices

' Define an enumeration of Win32 unmanaged types
Public Enum UnmanagedType
    User
    GDI
    Kernel
    Shell
    Networking
    Multimedia
End Enum 'UnmanagedType

' Define the Unmanaged attribute.
Public Class UnmanagedAttribute 
             Inherits Attribute

    ' Storage for the UnmanagedType value.
    Protected thisType As UnmanagedType
    
    ' Set the unmanaged type in the constructor.
    Public Sub New(ByVal type As UnmanagedType) 
        thisType = type
    End Sub
    
    ' Define a property to get and set the UnmanagedType value.
    Public Property Win32Type() As UnmanagedType 
        Get
            Return thisType
        End Get
        Set
            thisType = Win32Type
        End Set
    End Property
End Class

' Create a class for an imported Win32 unmanaged function.
Public Class Win32
    <DllImport("user32.dll", CharSet:=CharSet.Unicode)> _
    Public Shared Function MessageBox(ByVal hWnd As Integer, _
                                      ByVal Text As String, _
                                      ByVal caption As String, _
                                      ByVal type As Integer) As Integer
    End Function 'MessageBox
End Class

Public Class AClass
    ' Add some attributes to Win32CallMethod.
    <Obsolete("This method is obsolete. Use managed MsgBox instead."), _
     Unmanaged(UnmanagedType.User)>  _
    Public Sub Win32CallMethod() 
        Win32.MessageBox(0, "This is an unmanaged call.", "Caution!", 0)    
    End Sub
End Class

Class DemoClass
    Shared Sub Main(ByVal args() As String) 
        ' Get the AClass type to access its metadata.
        Dim clsType As Type = GetType(AClass)
        ' Get the type information for Win32CallMethod.
        Dim mInfo As MethodInfo = clsType.GetMethod("Win32CallMethod")
        If Not (mInfo Is Nothing) Then
            ' Iterate through all the attributes of the method.
            Dim attr As Attribute
            For Each attr In  Attribute.GetCustomAttributes(mInfo)
                ' Check for the Obsolete attribute.
                If attr.GetType().Equals(GetType(ObsoleteAttribute)) Then
                    Console.WriteLine("Method {0} is obsolete. The message is:", mInfo.Name)
                    Console.WriteLine("  ""{0}""", CType(attr, ObsoleteAttribute).Message)
                ' Check for the Unmanaged attribute.
                ElseIf attr.GetType().Equals(GetType(UnmanagedAttribute)) Then
                    Console.WriteLine("This method calls unmanaged code.")
                    Console.WriteLine( _
                            String.Format("The Unmanaged attribute type is {0}.", _
                            CType(attr, UnmanagedAttribute).Win32Type))
                    Dim myCls As New AClass()
                    myCls.Win32CallMethod()
                End If
            Next attr
        End If
    End Sub
End Class

'
'This code example produces the following results. 
'
'First, the compilation yields the warning, "...This method is 
'obsolete. Use managed MsgBox instead."
'Second, execution yields a message box with a title of "Caution!" 
'and message text of "This is an unmanaged call." 
'Third, the following text is displayed in the console window:
'
'Method Win32CallMethod is obsolete. The message is:
'  "This method is obsolete. Use managed MsgBox instead."
'This method calls unmanaged code.
'The Unmanaged attribute type is User.
' 

注釈

戻り値には @no__t の先祖のカスタム属性が含まれています。 inherittrue の場合は0です。The return value contains the custom attributes for ancestors of element if inherit is true.

注意

.NET Framework バージョン2.0 以降では、属性が新しいメタデータ形式で格納されている場合、このメソッドはメソッド、コンストラクター、および型のセキュリティ属性を返します。Starting with the .NET Framework version 2.0, this method returns security attributes on methods, constructors, and types if the attributes are stored in the new metadata format. バージョン2.0 以降でコンパイルされたアセンブリでは、新しい形式が使用されます。Assemblies compiled with version 2.0 or later use the new format. 以前のバージョンの .NET Framework でコンパイルされた動的アセンブリとアセンブリは、古い XML 形式を使用します。Dynamic assemblies and assemblies compiled with earlier versions of the .NET Framework use the old XML format. 宣言型セキュリティ属性の出力」を参照してください。See Emitting Declarative Security Attributes.

GetCustomAttributes(Assembly, Type) GetCustomAttributes(Assembly, Type) GetCustomAttributes(Assembly, Type) GetCustomAttributes(Assembly, Type)

アセンブリに適用されたカスタム属性の配列を取得します。Retrieves an array of the custom attributes applied to an assembly. 各パラメーターは、対象のアセンブリと検索対象のカスタム属性の型を指定します。Parameters specify the assembly, and the type of the custom attribute to search for.

public:
 static cli::array <Attribute ^> ^ GetCustomAttributes(System::Reflection::Assembly ^ element, Type ^ attributeType);
public static Attribute[] GetCustomAttributes (System.Reflection.Assembly element, Type attributeType);
static member GetCustomAttributes : System.Reflection.Assembly * Type -> Attribute[]
Public Shared Function GetCustomAttributes (element As Assembly, attributeType As Type) As Attribute()

パラメーター

element
Assembly Assembly Assembly Assembly

モジュールの再利用可能なコレクションを記述する Assembly クラスから派生したオブジェクト。An object derived from the Assembly class that describes a reusable collection of modules.

attributeType
Type Type Type Type

検索対象とするカスタム属性の型または基本型。The type, or a base type, of the custom attribute to search for.

戻り値

attributeType に適用された element 型のカスタム属性を格納する Attribute 配列。該当するカスタム属性が存在しない場合は空の配列。An Attribute array that contains the custom attributes of type attributeType applied to element, or an empty array if no such custom attributes exist.

例外

element または attributeTypenull です。element or attributeType is null.

attributeTypeAttribute から派生していません。attributeType is not derived from Attribute.

次のコード例は、パラメーターとして Assembly を受け取る GetCustomAttributes の使用方法を示しています。The following code example demonstrates the use of GetCustomAttributes, taking an Assembly as a parameter.

using namespace System;
using namespace System::Reflection;

[assembly:AssemblyTitle("CustAttrs1CPP")];
[assembly:AssemblyDescription("GetCustomAttributes() Demo")];
[assembly:AssemblyCompany("Microsoft")];

ref class Example
{};

static void main()
{
    Type^ clsType = Example::typeid;

    // Get the Assembly type to access its metadata.
    Assembly^ assy = clsType->Assembly;

    // Iterate through the attributes for the assembly.
    System::Collections::IEnumerator^ myEnum = Attribute::GetCustomAttributes( assy )->GetEnumerator();
    while ( myEnum->MoveNext() )
    {
       Attribute^ attr = safe_cast<Attribute^>(myEnum->Current);

       // Check for the AssemblyTitle attribute.
       if ( attr->GetType() == AssemblyTitleAttribute::typeid )
          Console::WriteLine( "Assembly title is \"{0}\".", (dynamic_cast<AssemblyTitleAttribute^>(attr))->Title );
          // Check for the AssemblyDescription attribute.
       else
          // Check for the AssemblyDescription attribute.
          if ( attr->GetType() == AssemblyDescriptionAttribute::typeid )
             Console::WriteLine( "Assembly description is \"{0}\".", (dynamic_cast<AssemblyDescriptionAttribute^>(attr))->Description );
          // Check for the AssemblyCompany attribute.
          else if ( attr->GetType() == AssemblyCompanyAttribute::typeid )
             Console::WriteLine( "Assembly company is {0}.", (dynamic_cast<AssemblyCompanyAttribute^>(attr))->Company );
    }
}
// The example displays the following output:
//     Assembly description is "GetCustomAttributes() Demo".
//     Assembly company is Microsoft.
//     Assembly title is "CustAttrs1CPP".
using System;
using System.Reflection;

[assembly: AssemblyTitle("CustAttrs1CS")]
[assembly: AssemblyDescription("GetCustomAttributes() Demo")]
[assembly: AssemblyCompany("Microsoft")]

class Example {
    static void Main() {
        // Get the Assembly object to access its metadata.
        Assembly assy = typeof(Example).Assembly;

        // Iterate through the attributes for the assembly.
        foreach(Attribute attr in Attribute.GetCustomAttributes(assy)) {
            // Check for the AssemblyTitle attribute.
            if (attr.GetType() == typeof(AssemblyTitleAttribute))
                Console.WriteLine("Assembly title is \"{0}\".",
                    ((AssemblyTitleAttribute)attr).Title);

            // Check for the AssemblyDescription attribute.
            else if (attr.GetType() == 
                typeof(AssemblyDescriptionAttribute))
                Console.WriteLine("Assembly description is \"{0}\".",
                    ((AssemblyDescriptionAttribute)attr).Description);

            // Check for the AssemblyCompany attribute.
            else if (attr.GetType() == typeof(AssemblyCompanyAttribute))
                Console.WriteLine("Assembly company is {0}.",
                    ((AssemblyCompanyAttribute)attr).Company);
        }
   }
}
// The example displays the following output:
//     Assembly title is "CustAttrs1CS".
//     Assembly description is "GetCustomAttributes() Demo".
//     Assembly company is Microsoft.
Imports System.Reflection

<Assembly: AssemblyTitle("CustAttrs1VB")> 
<Assembly: AssemblyDescription("GetCustomAttributes() Demo")> 
<Assembly: AssemblyCompany("Microsoft")> 

Module Example
    Sub Main()
        ' Get the Assembly type to access its metadata.
        Dim assy As Reflection.Assembly = GetType(Example).Assembly

        ' Iterate through all the attributes for the assembly.
        For Each attr As Attribute In Attribute.GetCustomAttributes(assy)
            ' Check for the AssemblyTitle attribute.
            If TypeOf attr Is AssemblyTitleAttribute Then
                ' Convert the attribute to access its data.
                Dim attrTitle As AssemblyTitleAttribute = _
                    CType(attr, AssemblyTitleAttribute)
                Console.WriteLine("Assembly title is ""{0}"".", _
                    attrTitle.Title)

            ' Check for the AssemblyDescription attribute.
            ElseIf TypeOf attr Is AssemblyDescriptionAttribute Then
                ' Convert the attribute to access its data.
                Dim attrDesc As AssemblyDescriptionAttribute = _
                    CType(attr, AssemblyDescriptionAttribute)
                Console.WriteLine("Assembly description is ""{0}"".", _
                    attrDesc.Description)

            ' Check for the AssemblyCompany attribute.
            ElseIf TypeOf attr Is AssemblyCompanyAttribute Then
                ' Convert the attribute to access its data.
                Dim attrComp As AssemblyCompanyAttribute = _
                    CType(attr, AssemblyCompanyAttribute)
                Console.WriteLine("Assembly company is {0}.", _
                    attrComp.Company)
            End If
        Next
    End Sub
End Module
' The example displays the following output:
'     Assembly company is Microsoft.
'     Assembly description is "GetCustomAttributes() Demo".
'     Assembly title is "CustAttrs1VB".

注釈

注意

.NET Framework バージョン2.0 以降では、属性が新しいメタデータ形式で格納されている場合、このメソッドはセキュリティ属性を返します。Starting with the .NET Framework version 2.0, this method returns security attributes if the attributes are stored in the new metadata format. バージョン2.0 以降でコンパイルされたアセンブリでは、新しい形式が使用されます。Assemblies compiled with version 2.0 or later use the new format. 以前のバージョンの .NET Framework でコンパイルされた動的アセンブリとアセンブリは、古い XML 形式を使用します。Dynamic assemblies and assemblies compiled with earlier versions of the .NET Framework use the old XML format. 宣言型セキュリティ属性の出力」を参照してください。See Emitting Declarative Security Attributes.

GetCustomAttributes(Assembly, Boolean) GetCustomAttributes(Assembly, Boolean) GetCustomAttributes(Assembly, Boolean) GetCustomAttributes(Assembly, Boolean)

アセンブリに適用されたカスタム属性の配列を取得します。Retrieves an array of the custom attributes applied to an assembly. 各パラメーターは、対象のアセンブリと無視する検索オプションを指定します。Parameters specify the assembly, and an ignored search option.

public:
 static cli::array <Attribute ^> ^ GetCustomAttributes(System::Reflection::Assembly ^ element, bool inherit);
public static Attribute[] GetCustomAttributes (System.Reflection.Assembly element, bool inherit);
static member GetCustomAttributes : System.Reflection.Assembly * bool -> Attribute[]
Public Shared Function GetCustomAttributes (element As Assembly, inherit As Boolean) As Attribute()

パラメーター

element
Assembly Assembly Assembly Assembly

モジュールの再利用可能なコレクションを記述する Assembly クラスから派生したオブジェクト。An object derived from the Assembly class that describes a reusable collection of modules.

inherit
Boolean Boolean Boolean Boolean

このパラメーターは無視され、このメソッドの動作には影響しません。This parameter is ignored, and does not affect the operation of this method.

戻り値

element に適用されたカスタム属性を格納する Attribute 配列。そのようなカスタム属性が存在しない場合は空の配列。An Attribute array that contains the custom attributes applied to element, or an empty array if no such custom attributes exist.

例外

element または attributeTypenull です。element or attributeType is null.

次のコード例は、パラメーターとして Assembly を受け取る GetCustomAttributes の使用方法を示しています。The following code example demonstrates the use of GetCustomAttributes, taking an Assembly as a parameter.

using namespace System;
using namespace System::Reflection;

[assembly:AssemblyTitle("CustAttrs1CPP")];
[assembly:AssemblyDescription("GetCustomAttributes() Demo")];
[assembly:AssemblyCompany("Microsoft")];

ref class Example
{};

static void main()
{
    Type^ clsType = Example::typeid;

    // Get the Assembly type to access its metadata.
    Assembly^ assy = clsType->Assembly;

    // Iterate through the attributes for the assembly.
    System::Collections::IEnumerator^ myEnum = Attribute::GetCustomAttributes( assy )->GetEnumerator();
    while ( myEnum->MoveNext() )
    {
       Attribute^ attr = safe_cast<Attribute^>(myEnum->Current);

       // Check for the AssemblyTitle attribute.
       if ( attr->GetType() == AssemblyTitleAttribute::typeid )
          Console::WriteLine( "Assembly title is \"{0}\".", (dynamic_cast<AssemblyTitleAttribute^>(attr))->Title );
          // Check for the AssemblyDescription attribute.
       else
          // Check for the AssemblyDescription attribute.
          if ( attr->GetType() == AssemblyDescriptionAttribute::typeid )
             Console::WriteLine( "Assembly description is \"{0}\".", (dynamic_cast<AssemblyDescriptionAttribute^>(attr))->Description );
          // Check for the AssemblyCompany attribute.
          else if ( attr->GetType() == AssemblyCompanyAttribute::typeid )
             Console::WriteLine( "Assembly company is {0}.", (dynamic_cast<AssemblyCompanyAttribute^>(attr))->Company );
    }
}
// The example displays the following output:
//     Assembly description is "GetCustomAttributes() Demo".
//     Assembly company is Microsoft.
//     Assembly title is "CustAttrs1CPP".
using System;
using System.Reflection;

[assembly: AssemblyTitle("CustAttrs1CS")]
[assembly: AssemblyDescription("GetCustomAttributes() Demo")]
[assembly: AssemblyCompany("Microsoft")]

class Example {
    static void Main() {
        // Get the Assembly object to access its metadata.
        Assembly assy = typeof(Example).Assembly;

        // Iterate through the attributes for the assembly.
        foreach(Attribute attr in Attribute.GetCustomAttributes(assy)) {
            // Check for the AssemblyTitle attribute.
            if (attr.GetType() == typeof(AssemblyTitleAttribute))
                Console.WriteLine("Assembly title is \"{0}\".",
                    ((AssemblyTitleAttribute)attr).Title);

            // Check for the AssemblyDescription attribute.
            else if (attr.GetType() == 
                typeof(AssemblyDescriptionAttribute))
                Console.WriteLine("Assembly description is \"{0}\".",
                    ((AssemblyDescriptionAttribute)attr).Description);

            // Check for the AssemblyCompany attribute.
            else if (attr.GetType() == typeof(AssemblyCompanyAttribute))
                Console.WriteLine("Assembly company is {0}.",
                    ((AssemblyCompanyAttribute)attr).Company);
        }
   }
}
// The example displays the following output:
//     Assembly title is "CustAttrs1CS".
//     Assembly description is "GetCustomAttributes() Demo".
//     Assembly company is Microsoft.
Imports System.Reflection

<Assembly: AssemblyTitle("CustAttrs1VB")> 
<Assembly: AssemblyDescription("GetCustomAttributes() Demo")> 
<Assembly: AssemblyCompany("Microsoft")> 

Module Example
    Sub Main()
        ' Get the Assembly type to access its metadata.
        Dim assy As Reflection.Assembly = GetType(Example).Assembly

        ' Iterate through all the attributes for the assembly.
        For Each attr As Attribute In Attribute.GetCustomAttributes(assy)
            ' Check for the AssemblyTitle attribute.
            If TypeOf attr Is AssemblyTitleAttribute Then
                ' Convert the attribute to access its data.
                Dim attrTitle As AssemblyTitleAttribute = _
                    CType(attr, AssemblyTitleAttribute)
                Console.WriteLine("Assembly title is ""{0}"".", _
                    attrTitle.Title)

            ' Check for the AssemblyDescription attribute.
            ElseIf TypeOf attr Is AssemblyDescriptionAttribute Then
                ' Convert the attribute to access its data.
                Dim attrDesc As AssemblyDescriptionAttribute = _
                    CType(attr, AssemblyDescriptionAttribute)
                Console.WriteLine("Assembly description is ""{0}"".", _
                    attrDesc.Description)

            ' Check for the AssemblyCompany attribute.
            ElseIf TypeOf attr Is AssemblyCompanyAttribute Then
                ' Convert the attribute to access its data.
                Dim attrComp As AssemblyCompanyAttribute = _
                    CType(attr, AssemblyCompanyAttribute)
                Console.WriteLine("Assembly company is {0}.", _
                    attrComp.Company)
            End If
        Next
    End Sub
End Module
' The example displays the following output:
'     Assembly company is Microsoft.
'     Assembly description is "GetCustomAttributes() Demo".
'     Assembly title is "CustAttrs1VB".

注釈

注意

.NET Framework バージョン2.0 以降では、属性が新しいメタデータ形式で格納されている場合、このメソッドはセキュリティ属性を返します。Starting with the .NET Framework version 2.0, this method returns security attributes if the attributes are stored in the new metadata format. バージョン2.0 以降でコンパイルされたアセンブリでは、新しい形式が使用されます。Assemblies compiled with version 2.0 or later use the new format. 以前のバージョンの .NET Framework でコンパイルされた動的アセンブリとアセンブリは、古い XML 形式を使用します。Dynamic assemblies and assemblies compiled with earlier versions of the .NET Framework use the old XML format. 宣言型セキュリティ属性の出力」を参照してください。See Emitting Declarative Security Attributes.

GetCustomAttributes(ParameterInfo) GetCustomAttributes(ParameterInfo) GetCustomAttributes(ParameterInfo) GetCustomAttributes(ParameterInfo)

メソッド パラメーターに適用されたカスタム属性の配列を取得します。Retrieves an array of the custom attributes applied to a method parameter. パラメーターは、対象のメソッド パラメーターを指定します。A parameter specifies the method parameter.

public:
 static cli::array <Attribute ^> ^ GetCustomAttributes(System::Reflection::ParameterInfo ^ element);
public static Attribute[] GetCustomAttributes (System.Reflection.ParameterInfo element);
static member GetCustomAttributes : System.Reflection.ParameterInfo -> Attribute[]
Public Shared Function GetCustomAttributes (element As ParameterInfo) As Attribute()

パラメーター

element
ParameterInfo ParameterInfo ParameterInfo ParameterInfo

クラスのメンバーのパラメーターを記述する ParameterInfo クラスから派生したオブジェクト。An object derived from the ParameterInfo class that describes a parameter of a member of a class.

戻り値

element に適用されたカスタム属性を格納する Attribute 配列。そのようなカスタム属性が存在しない場合は空の配列。An Attribute array that contains the custom attributes applied to element, or an empty array if no such custom attributes exist.

例外

カスタム属性の型を読み込むことはできません。A custom attribute type cannot be loaded.

次のコード例は、パラメーターとして ParameterInfo を取得して GetCustomAttributes を使用する方法を示しています。The following code example demonstrates the use of GetCustomAttributes, taking a ParameterInfo as a parameter.

using namespace System;
using namespace System::Reflection;
using namespace System::ComponentModel;

namespace CustAttrs5CS
{
   public ref class AClass
   {
   public:
      void ParamArrayAndDesc(
         // Add ParamArray and Description attributes.
         [Description("This argument is a ParamArray")]
         array<Int32>^args )
      {}
   };

   ref class DemoClass
   {
   public:
      static void Main()
      {
         // Get the Class type to access its metadata.
         Type^ clsType = AClass::typeid;

         // Get the type information for the method.
         MethodInfo^ mInfo = clsType->GetMethod( "ParamArrayAndDesc" );
         if ( mInfo != nullptr )
         {
            // Get the parameter information.
            array<ParameterInfo^>^pInfo = mInfo->GetParameters();
            if ( pInfo != nullptr )
            {
               // Iterate through all the attributes for the parameter.
               System::Collections::IEnumerator^ myEnum4 = Attribute::GetCustomAttributes( pInfo[ 0 ] )->GetEnumerator();
               while ( myEnum4->MoveNext() )
               {
                  Attribute^ attr = safe_cast<Attribute^>(myEnum4->Current);

                  // Check for the ParamArray attribute.
                  if ( attr->GetType() == ParamArrayAttribute::typeid )
                                    Console::WriteLine( "Parameter {0} for method {1} "
                  "has the ParamArray attribute.", pInfo[ 0 ]->Name, mInfo->Name );
                  // Check for the Description attribute.
                  else

                  // Check for the Description attribute.
                  if ( attr->GetType() == DescriptionAttribute::typeid )
                  {
                     Console::WriteLine( "Parameter {0} for method {1} "
                     "has a description attribute.", pInfo[ 0 ]->Name, mInfo->Name );
                     Console::WriteLine( "The description is: \"{0}\"", (dynamic_cast<DescriptionAttribute^>(attr))->Description );
                  }
               }
            }
         }
      }
   };
}

/*
 * Output:
 * Parameter args for method ParamArrayAndDesc has a description attribute.
 * The description is: "This argument is a ParamArray"
 * Parameter args for method ParamArrayAndDesc has the ParamArray attribute.
 */
using System;
using System.Reflection;
using System.ComponentModel;

namespace CustAttrs5CS {
    public class AClass {
        public void ParamArrayAndDesc(
            // Add ParamArray (with the keyword) and Description attributes.
            [Description("This argument is a ParamArray")]
            params int[] args)
        {}
    }

    class DemoClass {
        static void Main(string[] args) {
            // Get the Class type to access its metadata.
            Type clsType = typeof(AClass);
            // Get the type information for the method.
            MethodInfo mInfo = clsType.GetMethod("ParamArrayAndDesc");
            if (mInfo != null) {
                // Get the parameter information.
                ParameterInfo[] pInfo = mInfo.GetParameters();
                if (pInfo != null) {
                    // Iterate through all the attributes for the parameter.
                    foreach(Attribute attr in 
                        Attribute.GetCustomAttributes(pInfo[0])) {
                        // Check for the ParamArray attribute.
                        if (attr.GetType() == typeof(ParamArrayAttribute))
                            Console.WriteLine("Parameter {0} for method {1} " +
                                "has the ParamArray attribute.",
                                pInfo[0].Name, mInfo.Name);
                        // Check for the Description attribute.
                        else if (attr.GetType() == 
                            typeof(DescriptionAttribute)) {
                            Console.WriteLine("Parameter {0} for method {1} " +
                                "has a description attribute.",
                                pInfo[0].Name, mInfo.Name);
                            Console.WriteLine("The description is: \"{0}\"",
                                ((DescriptionAttribute)attr).Description);
                        }
                    }
                }
            }
        }
    }
}

/*
 * Output:
 * Parameter args for method ParamArrayAndDesc has a description attribute.
 * The description is: "This argument is a ParamArray"
 * Parameter args for method ParamArrayAndDesc has the ParamArray attribute.
 */
Imports System.Reflection
Imports System.ComponentModel

Module DemoModule
    Public Class AClass
        ' Add Description and ParamArray (with the keyword) attributes.
        Public Sub ParamArrayAndDesc( _
            <Description("This argument is a ParamArray")> _
            ByVal ParamArray args() As Integer)
        End Sub
    End Class

    Sub Main()
        ' Get the Class type to access its metadata.
        Dim clsType As Type = GetType(AClass)
        ' Get the type information for the method.
        Dim mInfo As MethodInfo = clsType.GetMethod("ParamArrayAndDesc")
        ' Get the Parameter information for the method.
        Dim pInfo() As ParameterInfo = mInfo.GetParameters()
        Dim attr As Attribute
        ' Iterate through each attribute of the parameter.
        For Each attr In Attribute.GetCustomAttributes(pInfo(0))
            ' Check for the ParamArray attribute.
            If TypeOf attr Is ParamArrayAttribute Then
                ' Convert the attribute to access its data.
                Dim paAttr As ParamArrayAttribute = _
                    CType(attr, ParamArrayAttribute)
                Console.WriteLine("Parameter {0} has the " + _
                    "ParamArray attribute.", pInfo(0).Name)
            ' Check for the Description attribute.
            ElseIf TypeOf attr Is DescriptionAttribute Then
                ' Convert the attribute to access its data.
                Dim descAttr As DescriptionAttribute = _
                    CType(attr, DescriptionAttribute)
                Console.WriteLine("Parameter {0} has a description " + _
                    "attribute. The description is:", pInfo(0).Name)
                Console.WriteLine(descAttr.Description)
            End If
        Next
    End Sub
End Module

' Output:
' Parameter args has a description attribute. The description is:
' This argument is a ParamArray
' Parameter args has the ParamArray attribute.

注釈

@No__t-0 が派生型のメソッドのパラメーターを表している場合、戻り値には、オーバーライドされた基本メソッドで同じパラメーターに適用された、継承可能なカスタム属性が含まれます。If element represents a parameter in a method of a derived type, the return value includes the inheritable custom attributes applied to the same parameter in the overridden base methods.

GetCustomAttributes(Module) GetCustomAttributes(Module) GetCustomAttributes(Module) GetCustomAttributes(Module)

モジュールに適用されたカスタム属性の配列を取得します。Retrieves an array of the custom attributes applied to a module. パラメーターは、対象のモジュールを指定します。A parameter specifies the module.

public:
 static cli::array <Attribute ^> ^ GetCustomAttributes(System::Reflection::Module ^ element);
public static Attribute[] GetCustomAttributes (System.Reflection.Module element);
static member GetCustomAttributes : System.Reflection.Module -> Attribute[]
Public Shared Function GetCustomAttributes (element As Module) As Attribute()

パラメーター

element
Module Module Module Module

移植可能な実行可能 (PE) ファイルを記述する Module クラスから派生したオブジェクト。An object derived from the Module class that describes a portable executable file.

戻り値

element に適用されたカスタム属性を格納する Attribute 配列。そのようなカスタム属性が存在しない場合は空の配列。An Attribute array that contains the custom attributes applied to element, or an empty array if no such custom attributes exist.

例外

次のコード例は、パラメーターとして Module を取得して GetCustomAttributes を使用する方法を示しています。The following code example demonstrates the use of GetCustomAttributes, taking a Module as a parameter.

using namespace System;
using namespace System::Reflection;
using namespace System::ComponentModel;

// Assign some attributes to the module.
// Set the module's CLSCompliant attribute to false
// The CLSCompliant attribute is applicable for /target:module.
[module:Description("A sample description")];
[module:CLSCompliant(false)];
namespace CustAttrs2CS
{
   ref class DemoClass
   {
   public:
      static void Main()
      {
         Type^ clsType = DemoClass::typeid;

         // Get the Module type to access its metadata.
         Module^ module = clsType->Module;

         // Iterate through all the attributes for the module.
         System::Collections::IEnumerator^ myEnum1 = Attribute::GetCustomAttributes( module )->GetEnumerator();
         while ( myEnum1->MoveNext() )
         {
            Attribute^ attr = safe_cast<Attribute^>(myEnum1->Current);

            // Check for the Description attribute.
            if ( attr->GetType() == DescriptionAttribute::typeid )
                        Console::WriteLine( "Module {0} has the description \"{1}\".", module->Name, (dynamic_cast<DescriptionAttribute^>(attr))->Description );
            // Check for the CLSCompliant attribute.
            else

            // Check for the CLSCompliant attribute.
            if ( attr->GetType() == CLSCompliantAttribute::typeid )
                        Console::WriteLine( "Module {0} {1} CLSCompliant.", module->Name, (dynamic_cast<CLSCompliantAttribute^>(attr))->IsCompliant ? (String^)"is" : "is not" );
         }
      }
   };
}


/*
 * Output:
 * Module CustAttrs2CS.exe is not CLSCompliant.
 * Module CustAttrs2CS.exe has the description "A sample description".
 */
using System;
using System.Reflection;
using System.ComponentModel;

// Assign some attributes to the module.
[module:Description("A sample description")]

// Set the module's CLSCompliant attribute to false
// The CLSCompliant attribute is applicable for /target:module.
[module:CLSCompliant(false)]

namespace CustAttrs2CS {
    class DemoClass {
        static void Main(string[] args) {
            Type clsType = typeof(DemoClass);
            // Get the Module type to access its metadata.
            Module module = clsType.Module;

            // Iterate through all the attributes for the module.
            foreach(Attribute attr in Attribute.GetCustomAttributes(module)) {
                // Check for the Description attribute.
                if (attr.GetType() == typeof(DescriptionAttribute))
                    Console.WriteLine("Module {0} has the description " +
                        "\"{1}\".", module.Name, 
                        ((DescriptionAttribute)attr).Description);
                // Check for the CLSCompliant attribute.
                else if (attr.GetType() == typeof(CLSCompliantAttribute))
                    Console.WriteLine("Module {0} {1} CLSCompliant.",
                        module.Name,
                        ((CLSCompliantAttribute)attr).IsCompliant ? 
                            "is" : "is not");
            }
        }
    }
}

/*
 * Output:
 * Module CustAttrs2CS.exe is not CLSCompliant.
 * Module CustAttrs2CS.exe has the description "A sample description".
 */
Imports System.Reflection
Imports System.ComponentModel

' Give the Module some attributes.
<Module: Description("A sample description")> 

' Make the CLSCompliant attribute False.
' The CLSCompliant attribute is applicable for /target:module.
<Module: CLSCompliant(False)> 

Module DemoModule

    Sub Main()
        ' Get the Module type to access its metadata.
        Dim modType As Reflection.Module = GetType(DemoModule).Module
        Dim attr As Attribute
        ' Iterate through all the attributes for the module.
        For Each attr In Attribute.GetCustomAttributes(modType)
            ' Check for the Description attribute.
            If TypeOf attr Is DescriptionAttribute Then
                ' Convert the attribute to access its data.
                Dim descAttr As DescriptionAttribute = _
                    CType(attr, DescriptionAttribute)
                Console.WriteLine("Module {0} has the description ""{1}"".", _
                    modType.Name, descAttr.Description)

            ' Check for the CLSCompliant attribute.
            ElseIf TypeOf attr Is CLSCompliantAttribute Then
                ' Convert the attribute to access its data.
                Dim CLSCompAttr As CLSCompliantAttribute = _
                    CType(attr, CLSCompliantAttribute)
                Dim strCompliant As String
                If CLSCompAttr.IsCompliant Then
                    strCompliant = "is"
                Else
                    strCompliant = "is not"
                End If
                Console.WriteLine("Module {0} {1} CLSCompliant.", _
                    modType.Name, strCompliant)
            End If
        Next
    End Sub
End Module

' Output:
' Module CustAttrs2VB.exe has the description "A sample description".
' Module CustAttrs2VB.exe is not CLSCompliant.

GetCustomAttributes(MemberInfo) GetCustomAttributes(MemberInfo) GetCustomAttributes(MemberInfo) GetCustomAttributes(MemberInfo)

型のメンバーに適用されたカスタム属性の配列を取得します。Retrieves an array of the custom attributes applied to a member of a type. パラメーターでメンバーを指定します。A parameter specifies the member.

public:
 static cli::array <Attribute ^> ^ GetCustomAttributes(System::Reflection::MemberInfo ^ element);
public static Attribute[] GetCustomAttributes (System.Reflection.MemberInfo element);
static member GetCustomAttributes : System.Reflection.MemberInfo -> Attribute[]
Public Shared Function GetCustomAttributes (element As MemberInfo) As Attribute()

パラメーター

element
MemberInfo MemberInfo MemberInfo MemberInfo

クラスのコンストラクター メンバー、イベント メンバー、フィールド メンバー、メソッド メンバー、またはプロパティ メンバーを記述する MemberInfo クラスから派生したオブジェクト。An object derived from the MemberInfo class that describes a constructor, event, field, method, or property member of a class.

戻り値

element に適用されたカスタム属性を格納する Attribute 配列。そのようなカスタム属性が存在しない場合は空の配列。An Attribute array that contains the custom attributes applied to element, or an empty array if no such custom attributes exist.

例外

elementがコンストラクター、メソッド、プロパティ、イベント、型、またはフィールドではありません。element is not a constructor, method, property, event, type, or field.

カスタム属性の型を読み込むことはできません。A custom attribute type cannot be loaded.

次のコード例は、パラメーターとして MemberInfo を取得して GetCustomAttribute を使用する方法を示しています。The following code example demonstrates the use of GetCustomAttribute, taking a MemberInfo as a parameter.

using namespace System;
using namespace System::Reflection;
using namespace System::Security;
using namespace System::Runtime::InteropServices;

namespace CustAttrs4CS
{
   // Create a class for Win32 imported unmanaged functions.
   public ref class Win32
   {
   public:

      [DllImport("user32.dll", CharSet = CharSet::Unicode)]
      static int MessageBox( int hWnd, String^ text, String^ caption, UInt32 type );
   };

   public ref class AClass
   {
   public:

      // Add some attributes to the Win32CallMethod.

      [Obsolete("This method is obsolete. Use managed MsgBox instead.")]
      void Win32CallMethod()
      {
         Win32::MessageBox( 0, "This is an unmanaged call.", "Be Careful!", 0 );
      }

   };

   ref class DemoClass
   {
   public:
      static void Main()
      {
         // Get the Class type to access its metadata.
         Type^ clsType = AClass::typeid;

         // Get the type information for the Win32CallMethod.
         MethodInfo^ mInfo = clsType->GetMethod( "Win32CallMethod" );
         if ( mInfo != nullptr )
         {
            // Iterate through all the attributes for the method.
            System::Collections::IEnumerator^ myEnum3 = Attribute::GetCustomAttributes( mInfo )->GetEnumerator();
            while ( myEnum3->MoveNext() )
            {
               Attribute^ attr = safe_cast<Attribute^>(myEnum3->Current);

               // Check for the Obsolete attribute.
               if ( attr->GetType() == ObsoleteAttribute::typeid )
               {
                  Console::WriteLine( "Method {0} is obsolete. "
                  "The message is:", mInfo->Name );
                  Console::WriteLine( (dynamic_cast<ObsoleteAttribute^>(attr))->Message );
               }
               // Check for the SuppressUnmanagedCodeSecurity attribute.
               else

               // Check for the SuppressUnmanagedCodeSecurity attribute.
               if ( attr->GetType() == SuppressUnmanagedCodeSecurityAttribute::typeid )
               {
                  Console::WriteLine( "This method calls unmanaged code "
                  "with no security check." );
                  Console::WriteLine( "Please do not use unless absolutely necessary." );
                  AClass^ myCls = gcnew AClass;
                  myCls->Win32CallMethod();
               }
            }
         }
      }
   };
}


/*
 * Output:
 * Method Win32CallMethod is obsolete. The message is:
 * This method is obsolete. Use managed MsgBox instead.
 * This method calls unmanaged code with no security check.
 * Please do not use unless absolutely necessary.
 */
using System;
using System.Reflection;
using System.Security;
using System.Runtime.InteropServices;

namespace CustAttrs4CS
{

    // Define an enumeration of Win32 unmanaged types
    public enum UnmanagedType
    {
        User,
        GDI,
        Kernel,
        Shell,
        Networking,
        Multimedia
    }

    // Define the Unmanaged attribute.
    public class UnmanagedAttribute : Attribute
    {
        // Storage for the UnmanagedType value.
        protected UnmanagedType thisType;

        // Set the unmanaged type in the constructor.
        public UnmanagedAttribute(UnmanagedType type)
        {
            thisType = type;
        }

        // Define a property to get and set the UnmanagedType value.
        public UnmanagedType Win32Type
        {
            get { return thisType; }
            set { thisType = Win32Type; }
        }
    }

    // Create a class for an imported Win32 unmanaged function.
    public class Win32 {
        [DllImport("user32.dll", CharSet = CharSet.Unicode)]
        public static extern int MessageBox(int hWnd, String text,
            String caption, uint type);
    }

    public class AClass {
        // Add some attributes to Win32CallMethod.
        [Obsolete("This method is obsolete. Use managed MsgBox instead.")]
        [Unmanaged(UnmanagedType.User)]
        public void Win32CallMethod()
        {
            Win32.MessageBox(0, "This is an unmanaged call.", "Caution!", 0);
        }
    }

    class DemoClass {
        static void Main(string[] args)
            {
            // Get the AClass type to access its metadata.
            Type clsType = typeof(AClass);
            // Get the type information for Win32CallMethod.
            MethodInfo mInfo = clsType.GetMethod("Win32CallMethod");
            if (mInfo != null)
            {
                // Iterate through all the attributes of the method.
                foreach(Attribute attr in
                    Attribute.GetCustomAttributes(mInfo)) {
                    // Check for the Obsolete attribute.
                    if (attr.GetType() == typeof(ObsoleteAttribute))
                    {
                        Console.WriteLine("Method {0} is obsolete. " +
                            "The message is:",
                            mInfo.Name);
                        Console.WriteLine("  \"{0}\"",
                            ((ObsoleteAttribute)attr).Message);
                    }

                    // Check for the Unmanaged attribute.
                    else if (attr.GetType() == typeof(UnmanagedAttribute))
                    {
                        Console.WriteLine(
                            "This method calls unmanaged code.");
                        Console.WriteLine(
                            String.Format("The Unmanaged attribute type is {0}.",
                                          ((UnmanagedAttribute)attr).Win32Type));
                        AClass myCls = new AClass();
                        myCls.Win32CallMethod();
                    }
                }
            }
        }
    }
}

/*

This code example produces the following results.

First, the compilation yields the warning, "...This method is
obsolete. Use managed MsgBox instead."
Second, execution yields a message box with a title of "Caution!"
and message text of "This is an unmanaged call."
Third, the following text is displayed in the console window:

Method Win32CallMethod is obsolete. The message is:
  "This method is obsolete. Use managed MsgBox instead."
This method calls unmanaged code.
The Unmanaged attribute type is User.

*/

Imports System.Reflection
Imports System.Security
Imports System.Runtime.InteropServices

' Define an enumeration of Win32 unmanaged types
Public Enum UnmanagedType
    User
    GDI
    Kernel
    Shell
    Networking
    Multimedia
End Enum 'UnmanagedType

' Define the Unmanaged attribute.
Public Class UnmanagedAttribute 
             Inherits Attribute

    ' Storage for the UnmanagedType value.
    Protected thisType As UnmanagedType
    
    ' Set the unmanaged type in the constructor.
    Public Sub New(ByVal type As UnmanagedType) 
        thisType = type
    End Sub
    
    ' Define a property to get and set the UnmanagedType value.
    Public Property Win32Type() As UnmanagedType 
        Get
            Return thisType
        End Get
        Set
            thisType = Win32Type
        End Set
    End Property
End Class

' Create a class for an imported Win32 unmanaged function.
Public Class Win32
    <DllImport("user32.dll", CharSet:=CharSet.Unicode)> _
    Public Shared Function MessageBox(ByVal hWnd As Integer, _
                                      ByVal Text As String, _
                                      ByVal caption As String, _
                                      ByVal type As Integer) As Integer
    End Function 'MessageBox
End Class

Public Class AClass
    ' Add some attributes to Win32CallMethod.
    <Obsolete("This method is obsolete. Use managed MsgBox instead."), _
     Unmanaged(UnmanagedType.User)>  _
    Public Sub Win32CallMethod() 
        Win32.MessageBox(0, "This is an unmanaged call.", "Caution!", 0)    
    End Sub
End Class

Class DemoClass
    Shared Sub Main(ByVal args() As String) 
        ' Get the AClass type to access its metadata.
        Dim clsType As Type = GetType(AClass)
        ' Get the type information for Win32CallMethod.
        Dim mInfo As MethodInfo = clsType.GetMethod("Win32CallMethod")
        If Not (mInfo Is Nothing) Then
            ' Iterate through all the attributes of the method.
            Dim attr As Attribute
            For Each attr In  Attribute.GetCustomAttributes(mInfo)
                ' Check for the Obsolete attribute.
                If attr.GetType().Equals(GetType(ObsoleteAttribute)) Then
                    Console.WriteLine("Method {0} is obsolete. The message is:", mInfo.Name)
                    Console.WriteLine("  ""{0}""", CType(attr, ObsoleteAttribute).Message)
                ' Check for the Unmanaged attribute.
                ElseIf attr.GetType().Equals(GetType(UnmanagedAttribute)) Then
                    Console.WriteLine("This method calls unmanaged code.")
                    Console.WriteLine( _
                            String.Format("The Unmanaged attribute type is {0}.", _
                            CType(attr, UnmanagedAttribute).Win32Type))
                    Dim myCls As New AClass()
                    myCls.Win32CallMethod()
                End If
            Next attr
        End If
    End Sub
End Class

'
'This code example produces the following results. 
'
'First, the compilation yields the warning, "...This method is 
'obsolete. Use managed MsgBox instead."
'Second, execution yields a message box with a title of "Caution!" 
'and message text of "This is an unmanaged call." 
'Third, the following text is displayed in the console window:
'
'Method Win32CallMethod is obsolete. The message is:
'  "This method is obsolete. Use managed MsgBox instead."
'This method calls unmanaged code.
'The Unmanaged attribute type is User.
' 

注釈

戻り値には element の先祖のカスタム属性が含まれています。The return value contains the custom attributes for ancestors of element.

注意

.NET Framework バージョン2.0 以降では、属性が新しいメタデータ形式で格納されている場合、このメソッドはメソッド、コンストラクター、および型のセキュリティ属性を返します。Starting with the .NET Framework version 2.0, this method returns security attributes on methods, constructors, and types if the attributes are stored in the new metadata format. バージョン2.0 以降でコンパイルされたアセンブリでは、新しい形式が使用されます。Assemblies compiled with version 2.0 or later use the new format. 以前のバージョンの .NET Framework でコンパイルされた動的アセンブリとアセンブリは、古い XML 形式を使用します。Dynamic assemblies and assemblies compiled with earlier versions of the .NET Framework use the old XML format. 宣言型セキュリティ属性の出力」を参照してください。See Emitting Declarative Security Attributes.

GetCustomAttributes(Assembly) GetCustomAttributes(Assembly) GetCustomAttributes(Assembly) GetCustomAttributes(Assembly)

アセンブリに適用されたカスタム属性の配列を取得します。Retrieves an array of the custom attributes applied to an assembly. パラメーターは対象のアセンブリを指定します。A parameter specifies the assembly.

public:
 static cli::array <Attribute ^> ^ GetCustomAttributes(System::Reflection::Assembly ^ element);
public static Attribute[] GetCustomAttributes (System.Reflection.Assembly element);
static member GetCustomAttributes : System.Reflection.Assembly -> Attribute[]
Public Shared Function GetCustomAttributes (element As Assembly) As Attribute()

パラメーター

element
Assembly Assembly Assembly Assembly

モジュールの再利用可能なコレクションを記述する Assembly クラスから派生したオブジェクト。An object derived from the Assembly class that describes a reusable collection of modules.

戻り値

element に適用されたカスタム属性を格納する Attribute 配列。そのようなカスタム属性が存在しない場合は空の配列。An Attribute array that contains the custom attributes applied to element, or an empty array if no such custom attributes exist.

例外

次の例では、現在のアセンブリで見つかったカスタム属性を取得します。The following example retrieves the custom attributes found in the current assembly.

using namespace System;
using namespace System::Reflection;

[assembly:AssemblyTitle("CustAttrs1CPP")];
[assembly:AssemblyDescription("GetCustomAttributes() Demo")];
[assembly:AssemblyCompany("Microsoft")];

ref class Example
{};

static void main()
{
    Type^ clsType = Example::typeid;

    // Get the Assembly type to access its metadata.
    Assembly^ assy = clsType->Assembly;

    // Iterate through the attributes for the assembly.
    System::Collections::IEnumerator^ myEnum = Attribute::GetCustomAttributes( assy )->GetEnumerator();
    while ( myEnum->MoveNext() )
    {
       Attribute^ attr = safe_cast<Attribute^>(myEnum->Current);

       // Check for the AssemblyTitle attribute.
       if ( attr->GetType() == AssemblyTitleAttribute::typeid )
          Console::WriteLine( "Assembly title is \"{0}\".", (dynamic_cast<AssemblyTitleAttribute^>(attr))->Title );
          // Check for the AssemblyDescription attribute.
       else
          // Check for the AssemblyDescription attribute.
          if ( attr->GetType() == AssemblyDescriptionAttribute::typeid )
             Console::WriteLine( "Assembly description is \"{0}\".", (dynamic_cast<AssemblyDescriptionAttribute^>(attr))->Description );
          // Check for the AssemblyCompany attribute.
          else if ( attr->GetType() == AssemblyCompanyAttribute::typeid )
             Console::WriteLine( "Assembly company is {0}.", (dynamic_cast<AssemblyCompanyAttribute^>(attr))->Company );
    }
}
// The example displays the following output:
//     Assembly description is "GetCustomAttributes() Demo".
//     Assembly company is Microsoft.
//     Assembly title is "CustAttrs1CPP".
using System;
using System.Reflection;

[assembly: AssemblyTitle("CustAttrs1CS")]
[assembly: AssemblyDescription("GetCustomAttributes() Demo")]
[assembly: AssemblyCompany("Microsoft")]

class Example {
    static void Main() {
        // Get the Assembly object to access its metadata.
        Assembly assy = typeof(Example).Assembly;

        // Iterate through the attributes for the assembly.
        foreach(Attribute attr in Attribute.GetCustomAttributes(assy)) {
            // Check for the AssemblyTitle attribute.
            if (attr.GetType() == typeof(AssemblyTitleAttribute))
                Console.WriteLine("Assembly title is \"{0}\".",
                    ((AssemblyTitleAttribute)attr).Title);

            // Check for the AssemblyDescription attribute.
            else if (attr.GetType() == 
                typeof(AssemblyDescriptionAttribute))
                Console.WriteLine("Assembly description is \"{0}\".",
                    ((AssemblyDescriptionAttribute)attr).Description);

            // Check for the AssemblyCompany attribute.
            else if (attr.GetType() == typeof(AssemblyCompanyAttribute))
                Console.WriteLine("Assembly company is {0}.",
                    ((AssemblyCompanyAttribute)attr).Company);
        }
   }
}
// The example displays the following output:
//     Assembly title is "CustAttrs1CS".
//     Assembly description is "GetCustomAttributes() Demo".
//     Assembly company is Microsoft.
Imports System.Reflection

<Assembly: AssemblyTitle("CustAttrs1VB")> 
<Assembly: AssemblyDescription("GetCustomAttributes() Demo")> 
<Assembly: AssemblyCompany("Microsoft")> 

Module Example
    Sub Main()
        ' Get the Assembly type to access its metadata.
        Dim assy As Reflection.Assembly = GetType(Example).Assembly

        ' Iterate through all the attributes for the assembly.
        For Each attr As Attribute In Attribute.GetCustomAttributes(assy)
            ' Check for the AssemblyTitle attribute.
            If TypeOf attr Is AssemblyTitleAttribute Then
                ' Convert the attribute to access its data.
                Dim attrTitle As AssemblyTitleAttribute = _
                    CType(attr, AssemblyTitleAttribute)
                Console.WriteLine("Assembly title is ""{0}"".", _
                    attrTitle.Title)

            ' Check for the AssemblyDescription attribute.
            ElseIf TypeOf attr Is AssemblyDescriptionAttribute Then
                ' Convert the attribute to access its data.
                Dim attrDesc As AssemblyDescriptionAttribute = _
                    CType(attr, AssemblyDescriptionAttribute)
                Console.WriteLine("Assembly description is ""{0}"".", _
                    attrDesc.Description)

            ' Check for the AssemblyCompany attribute.
            ElseIf TypeOf attr Is AssemblyCompanyAttribute Then
                ' Convert the attribute to access its data.
                Dim attrComp As AssemblyCompanyAttribute = _
                    CType(attr, AssemblyCompanyAttribute)
                Console.WriteLine("Assembly company is {0}.", _
                    attrComp.Company)
            End If
        Next
    End Sub
End Module
' The example displays the following output:
'     Assembly company is Microsoft.
'     Assembly description is "GetCustomAttributes() Demo".
'     Assembly title is "CustAttrs1VB".

注釈

注意

.NET Framework バージョン2.0 以降では、属性が新しいメタデータ形式で格納されている場合、このメソッドはセキュリティ属性を返します。Starting with the .NET Framework version 2.0, this method returns security attributes if the attributes are stored in the new metadata format. バージョン2.0 以降でコンパイルされたアセンブリでは、新しい形式が使用されます。Assemblies compiled with version 2.0 or later use the new format. 以前のバージョンの .NET Framework でコンパイルされた動的アセンブリとアセンブリは、古い XML 形式を使用します。Dynamic assemblies and assemblies compiled with earlier versions of the .NET Framework use the old XML format. 宣言型セキュリティ属性の出力」を参照してください。See Emitting Declarative Security Attributes.

GetCustomAttributes(MemberInfo, Type) GetCustomAttributes(MemberInfo, Type) GetCustomAttributes(MemberInfo, Type)

型のメンバーに適用されたカスタム属性の配列を取得します。Retrieves an array of the custom attributes applied to a member of a type. 各パラメーターは、対象のメンバーと検索対象のカスタム属性の型を指定します。Parameters specify the member, and the type of the custom attribute to search for.

public:
 static cli::array <Attribute ^> ^ GetCustomAttributes(System::Reflection::MemberInfo ^ element, Type ^ type);
public static Attribute[] GetCustomAttributes (System.Reflection.MemberInfo element, Type type);
static member GetCustomAttributes : System.Reflection.MemberInfo * Type -> Attribute[]

パラメーター

element
MemberInfo MemberInfo MemberInfo MemberInfo

クラスのコンストラクター メンバー、イベント メンバー、フィールド メンバー、メソッド メンバー、またはプロパティ メンバーを記述する MemberInfo クラスから派生したオブジェクト。An object derived from the MemberInfo class that describes a constructor, event, field, method, or property member of a class.

type
Type Type Type Type

検索対象とするカスタム属性の型または基本型。The type, or a base type, of the custom attribute to search for.

戻り値

type に適用された element 型のカスタム属性を格納する Attribute 配列。該当するカスタム属性が存在しない場合は空の配列。An Attribute array that contains the custom attributes of type type applied to element, or an empty array if no such custom attributes exist.

例外

element または typenull です。element or type is null.

typeAttribute から派生していません。type is not derived from Attribute.

elementがコンストラクター、メソッド、プロパティ、イベント、型、またはフィールドではありません。element is not a constructor, method, property, event, type, or field.

カスタム属性の型を読み込むことはできません。A custom attribute type cannot be loaded.

次のコード例は、パラメーターとして MemberInfo を取得して GetCustomAttribute を使用する方法を示しています。The following code example demonstrates the use of GetCustomAttribute, taking a MemberInfo as a parameter.

using namespace System;
using namespace System::Reflection;
using namespace System::Security;
using namespace System::Runtime::InteropServices;

namespace CustAttrs4CS
{
   // Create a class for Win32 imported unmanaged functions.
   public ref class Win32
   {
   public:

      [DllImport("user32.dll", CharSet = CharSet::Unicode)]
      static int MessageBox( int hWnd, String^ text, String^ caption, UInt32 type );
   };

   public ref class AClass
   {
   public:

      // Add some attributes to the Win32CallMethod.

      [Obsolete("This method is obsolete. Use managed MsgBox instead.")]
      void Win32CallMethod()
      {
         Win32::MessageBox( 0, "This is an unmanaged call.", "Be Careful!", 0 );
      }

   };

   ref class DemoClass
   {
   public:
      static void Main()
      {
         // Get the Class type to access its metadata.
         Type^ clsType = AClass::typeid;

         // Get the type information for the Win32CallMethod.
         MethodInfo^ mInfo = clsType->GetMethod( "Win32CallMethod" );
         if ( mInfo != nullptr )
         {
            // Iterate through all the attributes for the method.
            System::Collections::IEnumerator^ myEnum3 = Attribute::GetCustomAttributes( mInfo )->GetEnumerator();
            while ( myEnum3->MoveNext() )
            {
               Attribute^ attr = safe_cast<Attribute^>(myEnum3->Current);

               // Check for the Obsolete attribute.
               if ( attr->GetType() == ObsoleteAttribute::typeid )
               {
                  Console::WriteLine( "Method {0} is obsolete. "
                  "The message is:", mInfo->Name );
                  Console::WriteLine( (dynamic_cast<ObsoleteAttribute^>(attr))->Message );
               }
               // Check for the SuppressUnmanagedCodeSecurity attribute.
               else

               // Check for the SuppressUnmanagedCodeSecurity attribute.
               if ( attr->GetType() == SuppressUnmanagedCodeSecurityAttribute::typeid )
               {
                  Console::WriteLine( "This method calls unmanaged code "
                  "with no security check." );
                  Console::WriteLine( "Please do not use unless absolutely necessary." );
                  AClass^ myCls = gcnew AClass;
                  myCls->Win32CallMethod();
               }
            }
         }
      }
   };
}


/*
 * Output:
 * Method Win32CallMethod is obsolete. The message is:
 * This method is obsolete. Use managed MsgBox instead.
 * This method calls unmanaged code with no security check.
 * Please do not use unless absolutely necessary.
 */
using System;
using System.Reflection;
using System.Security;
using System.Runtime.InteropServices;

namespace CustAttrs4CS
{

    // Define an enumeration of Win32 unmanaged types
    public enum UnmanagedType
    {
        User,
        GDI,
        Kernel,
        Shell,
        Networking,
        Multimedia
    }

    // Define the Unmanaged attribute.
    public class UnmanagedAttribute : Attribute
    {
        // Storage for the UnmanagedType value.
        protected UnmanagedType thisType;

        // Set the unmanaged type in the constructor.
        public UnmanagedAttribute(UnmanagedType type)
        {
            thisType = type;
        }

        // Define a property to get and set the UnmanagedType value.
        public UnmanagedType Win32Type
        {
            get { return thisType; }
            set { thisType = Win32Type; }
        }
    }

    // Create a class for an imported Win32 unmanaged function.
    public class Win32 {
        [DllImport("user32.dll", CharSet = CharSet.Unicode)]
        public static extern int MessageBox(int hWnd, String text,
            String caption, uint type);
    }

    public class AClass {
        // Add some attributes to Win32CallMethod.
        [Obsolete("This method is obsolete. Use managed MsgBox instead.")]
        [Unmanaged(UnmanagedType.User)]
        public void Win32CallMethod()
        {
            Win32.MessageBox(0, "This is an unmanaged call.", "Caution!", 0);
        }
    }

    class DemoClass {
        static void Main(string[] args)
            {
            // Get the AClass type to access its metadata.
            Type clsType = typeof(AClass);
            // Get the type information for Win32CallMethod.
            MethodInfo mInfo = clsType.GetMethod("Win32CallMethod");
            if (mInfo != null)
            {
                // Iterate through all the attributes of the method.
                foreach(Attribute attr in
                    Attribute.GetCustomAttributes(mInfo)) {
                    // Check for the Obsolete attribute.
                    if (attr.GetType() == typeof(ObsoleteAttribute))
                    {
                        Console.WriteLine("Method {0} is obsolete. " +
                            "The message is:",
                            mInfo.Name);
                        Console.WriteLine("  \"{0}\"",
                            ((ObsoleteAttribute)attr).Message);
                    }

                    // Check for the Unmanaged attribute.
                    else if (attr.GetType() == typeof(UnmanagedAttribute))
                    {
                        Console.WriteLine(
                            "This method calls unmanaged code.");
                        Console.WriteLine(
                            String.Format("The Unmanaged attribute type is {0}.",
                                          ((UnmanagedAttribute)attr).Win32Type));
                        AClass myCls = new AClass();
                        myCls.Win32CallMethod();
                    }
                }
            }
        }
    }
}

/*

This code example produces the following results.

First, the compilation yields the warning, "...This method is
obsolete. Use managed MsgBox instead."
Second, execution yields a message box with a title of "Caution!"
and message text of "This is an unmanaged call."
Third, the following text is displayed in the console window:

Method Win32CallMethod is obsolete. The message is:
  "This method is obsolete. Use managed MsgBox instead."
This method calls unmanaged code.
The Unmanaged attribute type is User.

*/

Imports System.Reflection
Imports System.Security
Imports System.Runtime.InteropServices

' Define an enumeration of Win32 unmanaged types
Public Enum UnmanagedType
    User
    GDI
    Kernel
    Shell
    Networking
    Multimedia
End Enum 'UnmanagedType

' Define the Unmanaged attribute.
Public Class UnmanagedAttribute 
             Inherits Attribute

    ' Storage for the UnmanagedType value.
    Protected thisType As UnmanagedType
    
    ' Set the unmanaged type in the constructor.
    Public Sub New(ByVal type As UnmanagedType) 
        thisType = type
    End Sub
    
    ' Define a property to get and set the UnmanagedType value.
    Public Property Win32Type() As UnmanagedType 
        Get
            Return thisType
        End Get
        Set
            thisType = Win32Type
        End Set
    End Property
End Class

' Create a class for an imported Win32 unmanaged function.
Public Class Win32
    <DllImport("user32.dll", CharSet:=CharSet.Unicode)> _
    Public Shared Function MessageBox(ByVal hWnd As Integer, _
                                      ByVal Text As String, _
                                      ByVal caption As String, _
                                      ByVal type As Integer) As Integer
    End Function 'MessageBox
End Class

Public Class AClass
    ' Add some attributes to Win32CallMethod.
    <Obsolete("This method is obsolete. Use managed MsgBox instead."), _
     Unmanaged(UnmanagedType.User)>  _
    Public Sub Win32CallMethod() 
        Win32.MessageBox(0, "This is an unmanaged call.", "Caution!", 0)    
    End Sub
End Class

Class DemoClass
    Shared Sub Main(ByVal args() As String) 
        ' Get the AClass type to access its metadata.
        Dim clsType As Type = GetType(AClass)
        ' Get the type information for Win32CallMethod.
        Dim mInfo As MethodInfo = clsType.GetMethod("Win32CallMethod")
        If Not (mInfo Is Nothing) Then
            ' Iterate through all the attributes of the method.
            Dim attr As Attribute
            For Each attr In  Attribute.GetCustomAttributes(mInfo)
                ' Check for the Obsolete attribute.
                If attr.GetType().Equals(GetType(ObsoleteAttribute)) Then
                    Console.WriteLine("Method {0} is obsolete. The message is:", mInfo.Name)
                    Console.WriteLine("  ""{0}""", CType(attr, ObsoleteAttribute).Message)
                ' Check for the Unmanaged attribute.
                ElseIf attr.GetType().Equals(GetType(UnmanagedAttribute)) Then
                    Console.WriteLine("This method calls unmanaged code.")
                    Console.WriteLine( _
                            String.Format("The Unmanaged attribute type is {0}.", _
                            CType(attr, UnmanagedAttribute).Win32Type))
                    Dim myCls As New AClass()
                    myCls.Win32CallMethod()
                End If
            Next attr
        End If
    End Sub
End Class

'
'This code example produces the following results. 
'
'First, the compilation yields the warning, "...This method is 
'obsolete. Use managed MsgBox instead."
'Second, execution yields a message box with a title of "Caution!" 
'and message text of "This is an unmanaged call." 
'Third, the following text is displayed in the console window:
'
'Method Win32CallMethod is obsolete. The message is:
'  "This method is obsolete. Use managed MsgBox instead."
'This method calls unmanaged code.
'The Unmanaged attribute type is User.
' 

注釈

戻り値には element の先祖のカスタム属性が含まれています。The return value contains the custom attributes for ancestors of element.

注意

.NET Framework バージョン2.0 以降では、属性が新しいメタデータ形式で格納されている場合、このメソッドはメソッド、コンストラクター、および型のセキュリティ属性を返します。Starting with the .NET Framework version 2.0, this method returns security attributes on methods, constructors, and types if the attributes are stored in the new metadata format. バージョン2.0 以降でコンパイルされたアセンブリでは、新しい形式が使用されます。Assemblies compiled with version 2.0 or later use the new format. 以前のバージョンの .NET Framework でコンパイルされた動的アセンブリとアセンブリは、古い XML 形式を使用します。Dynamic assemblies and assemblies compiled with earlier versions of the .NET Framework use the old XML format. 宣言型セキュリティ属性の出力」を参照してください。See Emitting Declarative Security Attributes.

適用対象