Attribute.GetCustomAttributes Methode

Definitie

Hiermee haalt u een matrix op van de aangepaste kenmerken die zijn toegepast op een assembly, module, type lid of methodeparameter.

Overloads

Name Description
GetCustomAttributes(ParameterInfo, Boolean)

Hiermee haalt u een matrix op van de aangepaste kenmerken die zijn toegepast op een methodeparameter. Parameters geven de methodeparameter op en of u bovenliggende kenmerken van de methodeparameter wilt doorzoeken.

GetCustomAttributes(MemberInfo, Type, Boolean)

Hiermee wordt een matrix opgehaald van de aangepaste kenmerken die zijn toegepast op een lid van een type. Parameters geven het lid, het type aangepast kenmerk op dat moet worden gezocht en of er moet worden gezocht naar bovenliggende voorouders van het lid.

GetCustomAttributes(ParameterInfo, Type, Boolean)

Hiermee haalt u een matrix op van de aangepaste kenmerken die zijn toegepast op een methodeparameter. Parameters specificeren de methodeparameter, het type aangepast kenmerk dat moet worden gezocht en of er moet worden gezocht naar bovenliggende elementen van de methodeparameter.

GetCustomAttributes(Module, Type, Boolean)

Hiermee haalt u een matrix op van de aangepaste kenmerken die zijn toegepast op een module. Parameters geven de module, het type aangepast kenmerk op dat moet worden gezocht en een genegeerde zoekoptie.

GetCustomAttributes(MemberInfo, Type)

Hiermee wordt een matrix opgehaald van de aangepaste kenmerken die zijn toegepast op een lid van een type. Parameters geven het lid op en het type van het aangepaste kenmerk dat moet worden gezocht.

GetCustomAttributes(Assembly, Type, Boolean)

Hiermee haalt u een matrix op van de aangepaste kenmerken die zijn toegepast op een assembly. Parameters geven de assembly, het type aangepast kenmerk op dat moet worden gezocht en een genegeerde zoekoptie.

GetCustomAttributes(Module, Type)

Hiermee haalt u een matrix op van de aangepaste kenmerken die zijn toegepast op een module. Parameters geven de module en het type van het aangepaste kenmerk op dat moet worden gezocht.

GetCustomAttributes(ParameterInfo, Type)

Hiermee haalt u een matrix op van de aangepaste kenmerken die zijn toegepast op een methodeparameter. Parameters geven de methodeparameter en het type van het aangepaste kenmerk op dat moet worden gezocht.

GetCustomAttributes(MemberInfo, Boolean)

Hiermee wordt een matrix opgehaald van de aangepaste kenmerken die zijn toegepast op een lid van een type. Parameters geven het lid, het type aangepast kenmerk op dat moet worden gezocht en of er moet worden gezocht naar bovenliggende voorouders van het lid.

GetCustomAttributes(Assembly, Type)

Hiermee haalt u een matrix op van de aangepaste kenmerken die zijn toegepast op een assembly. Parameters geven de assembly op en het type van het aangepaste kenmerk dat moet worden gezocht.

GetCustomAttributes(Assembly, Boolean)

Hiermee haalt u een matrix op van de aangepaste kenmerken die zijn toegepast op een assembly. Parameters geven de assembly en een genegeerde zoekoptie op.

GetCustomAttributes(ParameterInfo)

Hiermee haalt u een matrix op van de aangepaste kenmerken die zijn toegepast op een methodeparameter. Een parameter geeft de methodeparameter op.

GetCustomAttributes(Module)

Hiermee haalt u een matrix op van de aangepaste kenmerken die zijn toegepast op een module. Met een parameter wordt de module opgegeven.

GetCustomAttributes(MemberInfo)

Hiermee wordt een matrix opgehaald van de aangepaste kenmerken die zijn toegepast op een lid van een type. Met een parameter wordt het lid opgegeven.

GetCustomAttributes(Assembly)

Hiermee haalt u een matrix op van de aangepaste kenmerken die zijn toegepast op een assembly. Met een parameter wordt de assembly opgegeven.

GetCustomAttributes(Module, Boolean)

Hiermee haalt u een matrix op van de aangepaste kenmerken die zijn toegepast op een module. Parameters geven de module en een genegeerde zoekoptie op.

GetCustomAttributes(ParameterInfo, Boolean)

Hiermee haalt u een matrix op van de aangepaste kenmerken die zijn toegepast op een methodeparameter. Parameters geven de methodeparameter op en of u bovenliggende kenmerken van de methodeparameter wilt doorzoeken.

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()

Parameters

element
ParameterInfo

Een object dat is afgeleid van de ParameterInfo klasse die een parameter beschrijft van een lid van een klasse.

inherit
Boolean

Als true, geeft u ook aan om de voorouderen van element te zoeken naar aangepaste kenmerken.

Retouren

Een Attribute matrix die de aangepaste kenmerken bevat die zijn toegepast elementop of een lege matrix als er geen aangepaste kenmerken bestaan.

Uitzonderingen

De Member eigenschap van element is null.

element is null.

Een aangepast kenmerktype kan niet worden geladen.

Voorbeelden

In het volgende codevoorbeeld ziet u hoe GetCustomAttributesu een ParameterInfo parameter als parameter gebruikt.

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 the ParamArray attribute.
 * Parameter args for method ParamArrayAndDesc has a description attribute.
 * The description is: "This argument is a ParamArray"
 */
open System
open System.Reflection
open System.ComponentModel

type AClass() =
    member _.ParamArrayAndDesc(
        // Add ParamArray and Description attributes.
        [<Description "This argument is a ParamArray">]
        [<ParamArray>]
        args: int[]) = ()

// Get the Class type to access its metadata.
let clsType = typeof<AClass>

// Get the type information for the method.
let mInfo = clsType.GetMethod "ParamArrayAndDesc"
if mInfo <> null then
    // Get the parameter information.
    let pInfo = mInfo.GetParameters()
    if pInfo <> null then
        // Iterate through all the attributes for the parameter.
        for attr in Attribute.GetCustomAttributes pInfo[0] do
            match attr with 
            // Check for the ParamArray attribute.
            | :? ParamArrayAttribute ->
                printfn $"Parameter {pInfo[0].Name} for method {mInfo.Name} has the ParamArray attribute."
                                
            // Check for the Description attribute.
            | :? DescriptionAttribute as attr ->
                printfn $"Parameter {pInfo[0].Name} for method {mInfo.Name} has a description attribute."
                printfn $"The description is: \"{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} for method {1} has the " + _
                    "ParamArray attribute.", pInfo(0).Name, mInfo.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} for method {1} has a description " + _
                    "attribute. The description is:", pInfo(0).Name, mInfo.Name)
                Console.WriteLine(descAttr.Description)
            End If
        Next
    End Sub
End Module

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

Opmerkingen

Als element een parameter in een methode van een afgeleid type vertegenwoordigt, bevat de retourwaarde de overgenomen aangepaste kenmerken die zijn toegepast op dezelfde parameter in de overschreven basismethoden.

Van toepassing op

GetCustomAttributes(MemberInfo, Type, Boolean)

Hiermee wordt een matrix opgehaald van de aangepaste kenmerken die zijn toegepast op een lid van een type. Parameters geven het lid, het type aangepast kenmerk op dat moet worden gezocht en of er moet worden gezocht naar bovenliggende voorouders van het lid.

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[]
Public Shared Function GetCustomAttributes (element As MemberInfo, type As Type, inherit As Boolean) As Attribute()

Parameters

element
MemberInfo

Een object dat is afgeleid van de MemberInfo klasse die een constructor, gebeurtenis, veld, methode of eigenschapslid van een klasse beschrijft.

typeattributeType
Type

Het type, of een basistype, van het aangepaste kenmerk dat moet worden gezocht.

inherit
Boolean

Als true, geeft u ook aan om de voorouderen van element te zoeken naar aangepaste kenmerken.

Retouren

Een Attribute matrix met de aangepaste kenmerken van het type type waarop wordt toegepast element, of een lege matrix als er geen aangepaste kenmerken bestaan.

Uitzonderingen

element of type is null.

type is niet afgeleid van Attribute.

element is geen constructor, methode, eigenschap, gebeurtenis, type of veld.

Een aangepast kenmerktype kan niet worden geladen.

Voorbeelden

In het volgende codevoorbeeld ziet u hoe GetCustomAttributesu een MemberInfo parameter als parameter gebruikt.

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.

*/
open System
open System.Runtime.InteropServices

// Define an enumeration of Win32 unmanaged types
type UnmanagedType =
    | User = 0
    | GDI = 1
    | Kernel = 2
    | Shell = 3
    | Networking = 4
    | Multimedia = 5

// Define the Unmanaged attribute.
type UnmanagedAttribute(unmanagedType) =
    inherit Attribute()
    
    // Define a property to get and set the UnmanagedType value.
    member val Win32Type = unmanagedType with get, set

// Create a module for an imported Win32 unmanaged function.
module Win32 =
    [<DllImport("user32.dll", CharSet = CharSet.Unicode)>]
    extern int MessageBox(IntPtr hWnd, String text, String caption, uint ``type``)

type AClass() =
    // Add some attributes to Win32CallMethod.
    [<Obsolete "This method is obsolete. Use managed MsgBox instead.">]
    [<Unmanaged(UnmanagedType.User)>]
    member _.Win32CallMethod () =
        Win32.MessageBox(0, "This is an unmanaged call.", "Caution!", 0u)

// Get the AClass type to access its metadata.
let clsType = typeof<AClass>
// Get the type information for Win32CallMethod.
let mInfo = clsType.GetMethod "Win32CallMethod"
if mInfo <> null then
    // Iterate through all the attributes of the method.
    for attr in Attribute.GetCustomAttributes mInfo do
        match attr with 
        // Check for the Obsolete attribute.
        | :? ObsoleteAttribute as attr ->
            printfn $"Method {mInfo.Name} is obsolete. The message is:"
            printfn $"  \"{attr.Message}\""

        // Check for the Unmanaged attribute.
        | :? UnmanagedAttribute as attr ->
            printfn "This method calls unmanaged code."
            printfn $"The Unmanaged attribute type is {attr.Win32Type}."
            let myCls = AClass()
            myCls.Win32CallMethod() |> ignore
        | _ -> ()

// 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.
'

Opmerkingen

De retourwaarde bevat de aangepaste kenmerken voor voorouderen van element als inherit dat het is true.

Note

Vanaf de .NET Framework versie 2.0 retourneert deze methode beveiligingskenmerken op methoden, constructors en typen als de kenmerken worden opgeslagen in de nieuwe metagegevensindeling. Assembly's die zijn gecompileerd met versie 2.0 of hoger, gebruiken de nieuwe indeling. Dynamische assembly's en assembly's die zijn gecompileerd met eerdere versies van het .NET Framework gebruiken de oude XML-indeling. Zie Declaratieve beveiligingskenmerken verzenden.

Van toepassing op

GetCustomAttributes(ParameterInfo, Type, Boolean)

Hiermee haalt u een matrix op van de aangepaste kenmerken die zijn toegepast op een methodeparameter. Parameters specificeren de methodeparameter, het type aangepast kenmerk dat moet worden gezocht en of er moet worden gezocht naar bovenliggende elementen van de methodeparameter.

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()

Parameters

element
ParameterInfo

Een object dat is afgeleid van de ParameterInfo klasse die een parameter beschrijft van een lid van een klasse.

attributeType
Type

Het type, of een basistype, van het aangepaste kenmerk dat moet worden gezocht.

inherit
Boolean

Als true, geeft u ook aan om de voorouderen van element te zoeken naar aangepaste kenmerken.

Retouren

Een Attribute matrix met de aangepaste kenmerken van het type attributeType waarop wordt toegepast element, of een lege matrix als er geen aangepaste kenmerken bestaan.

Uitzonderingen

element of attributeType is null.

attributeType is niet afgeleid van Attribute.

Een aangepast kenmerktype kan niet worden geladen.

Voorbeelden

In het volgende codevoorbeeld ziet u hoe GetCustomAttributesu een ParameterInfo parameter als parameter gebruikt.

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 the ParamArray attribute.
 * Parameter args for method ParamArrayAndDesc has a description attribute.
 * The description is: "This argument is a ParamArray"
 */
open System
open System.Reflection
open System.ComponentModel

type AClass() =
    member _.ParamArrayAndDesc(
        // Add ParamArray and Description attributes.
        [<Description "This argument is a ParamArray">]
        [<ParamArray>]
        args: int[]) = ()

// Get the Class type to access its metadata.
let clsType = typeof<AClass>

// Get the type information for the method.
let mInfo = clsType.GetMethod "ParamArrayAndDesc"
if mInfo <> null then
    // Get the parameter information.
    let pInfo = mInfo.GetParameters()
    if pInfo <> null then
        // Iterate through all the attributes for the parameter.
        for attr in Attribute.GetCustomAttributes pInfo[0] do
            match attr with 
            // Check for the ParamArray attribute.
            | :? ParamArrayAttribute ->
                printfn $"Parameter {pInfo[0].Name} for method {mInfo.Name} has the ParamArray attribute."
                                
            // Check for the Description attribute.
            | :? DescriptionAttribute as attr ->
                printfn $"Parameter {pInfo[0].Name} for method {mInfo.Name} has a description attribute."
                printfn $"The description is: \"{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} for method {1} has the " + _
                    "ParamArray attribute.", pInfo(0).Name, mInfo.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} for method {1} has a description " + _
                    "attribute. The description is:", pInfo(0).Name, mInfo.Name)
                Console.WriteLine(descAttr.Description)
            End If
        Next
    End Sub
End Module

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

Opmerkingen

Als element een parameter in een methode van een afgeleid type vertegenwoordigt, bevat de retourwaarde de overgenomen aangepaste kenmerken die zijn toegepast op dezelfde parameter in de overschreven basismethoden.

Van toepassing op

GetCustomAttributes(Module, Type, Boolean)

Hiermee haalt u een matrix op van de aangepaste kenmerken die zijn toegepast op een module. Parameters geven de module, het type aangepast kenmerk op dat moet worden gezocht en een genegeerde zoekoptie.

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()

Parameters

element
Module

Een object dat is afgeleid van de Module klasse die een draagbaar uitvoerbaar bestand beschrijft.

attributeType
Type

Het type, of een basistype, van het aangepaste kenmerk dat moet worden gezocht.

inherit
Boolean

Deze parameter wordt genegeerd en heeft geen invloed op de werking van deze methode.

Retouren

Een Attribute matrix met de aangepaste kenmerken van het type attributeType waarop wordt toegepast element, of een lege matrix als er geen aangepaste kenmerken bestaan.

Uitzonderingen

element of attributeType is null.

attributeType is niet afgeleid van Attribute.

Voorbeelden

In het volgende codevoorbeeld ziet u hoe GetCustomAttributesu een Module parameter als parameter gebruikt.

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".
 */
open System
open 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>]
do ()

type DemoClass = class end

// Get the Module type to access its metadata.
let ilmodule = typeof<DemoClass>.Module

// Iterate through all the attributes for the module.
for attr in Attribute.GetCustomAttributes ilmodule do
    match attr with
    // Check for the Description attribute.
    | :? DescriptionAttribute as attr ->
        printfn $"Module {ilmodule.Name} has the description \"{attr.Description}\"."
                
    // Check for the CLSCompliant attribute.
    | :? CLSCompliantAttribute as attr ->
        printfn $"""Module {ilmodule.Name} {if attr.IsCompliant then "is" else "is not"} CLSCompliant."""
    | _ -> ()
    
// 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.

Opmerkingen

De retourwaarde bevat de aangepaste kenmerken voor voorouderen van element als inherit dat het is true.

Van toepassing op

GetCustomAttributes(MemberInfo, Type)

Hiermee wordt een matrix opgehaald van de aangepaste kenmerken die zijn toegepast op een lid van een type. Parameters geven het lid op en het type van het aangepaste kenmerk dat moet worden gezocht.

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[]
Public Shared Function GetCustomAttributes (element As MemberInfo, type As Type) As Attribute()

Parameters

element
MemberInfo

Een object dat is afgeleid van de MemberInfo klasse die een constructor, gebeurtenis, veld, methode of eigenschapslid van een klasse beschrijft.

typeattributeType
Type

Het type, of een basistype, van het aangepaste kenmerk dat moet worden gezocht.

Retouren

Een Attribute matrix met de aangepaste kenmerken van het type type waarop wordt toegepast element, of een lege matrix als er geen aangepaste kenmerken bestaan.

Uitzonderingen

element of type is null.

type is niet afgeleid van Attribute.

element is geen constructor, methode, eigenschap, gebeurtenis, type of veld.

Een aangepast kenmerktype kan niet worden geladen.

Voorbeelden

In het volgende codevoorbeeld ziet u hoe GetCustomAttributeu een MemberInfo parameter als parameter gebruikt.

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.

*/
open System
open System.Runtime.InteropServices

// Define an enumeration of Win32 unmanaged types
type UnmanagedType =
    | User = 0
    | GDI = 1
    | Kernel = 2
    | Shell = 3
    | Networking = 4
    | Multimedia = 5

// Define the Unmanaged attribute.
type UnmanagedAttribute(unmanagedType) =
    inherit Attribute()
    
    // Define a property to get and set the UnmanagedType value.
    member val Win32Type = unmanagedType with get, set

// Create a module for an imported Win32 unmanaged function.
module Win32 =
    [<DllImport("user32.dll", CharSet = CharSet.Unicode)>]
    extern int MessageBox(IntPtr hWnd, String text, String caption, uint ``type``)

type AClass() =
    // Add some attributes to Win32CallMethod.
    [<Obsolete "This method is obsolete. Use managed MsgBox instead.">]
    [<Unmanaged(UnmanagedType.User)>]
    member _.Win32CallMethod () =
        Win32.MessageBox(0, "This is an unmanaged call.", "Caution!", 0u)

// Get the AClass type to access its metadata.
let clsType = typeof<AClass>
// Get the type information for Win32CallMethod.
let mInfo = clsType.GetMethod "Win32CallMethod"
if mInfo <> null then
    // Iterate through all the attributes of the method.
    for attr in Attribute.GetCustomAttributes mInfo do
        match attr with 
        // Check for the Obsolete attribute.
        | :? ObsoleteAttribute as attr ->
            printfn $"Method {mInfo.Name} is obsolete. The message is:"
            printfn $"  \"{attr.Message}\""

        // Check for the Unmanaged attribute.
        | :? UnmanagedAttribute as attr ->
            printfn "This method calls unmanaged code."
            printfn $"The Unmanaged attribute type is {attr.Win32Type}."
            let myCls = AClass()
            myCls.Win32CallMethod() |> ignore
        | _ -> ()

// 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.
'

Opmerkingen

De retourwaarde bevat de aangepaste kenmerken voor voorouders van element.

Note

Vanaf de .NET Framework versie 2.0 retourneert deze methode beveiligingskenmerken op methoden, constructors en typen als de kenmerken worden opgeslagen in de nieuwe metagegevensindeling. Assembly's die zijn gecompileerd met versie 2.0 of hoger, gebruiken de nieuwe indeling. Dynamische assembly's en assembly's die zijn gecompileerd met eerdere versies van het .NET Framework gebruiken de oude XML-indeling. Zie Declaratieve beveiligingskenmerken verzenden.

Van toepassing op

GetCustomAttributes(Assembly, Type, Boolean)

Hiermee haalt u een matrix op van de aangepaste kenmerken die zijn toegepast op een assembly. Parameters geven de assembly, het type aangepast kenmerk op dat moet worden gezocht en een genegeerde zoekoptie.

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()

Parameters

element
Assembly

Een object dat is afgeleid van de Assembly klasse die een herbruikbare verzameling modules beschrijft.

attributeType
Type

Het type, of een basistype, van het aangepaste kenmerk dat moet worden gezocht.

inherit
Boolean

Deze parameter wordt genegeerd en heeft geen invloed op de werking van deze methode.

Retouren

Een Attribute matrix met de aangepaste kenmerken van het type attributeType waarop wordt toegepast element, of een lege matrix als er geen aangepaste kenmerken bestaan.

Uitzonderingen

element of attributeType is null.

attributeType is niet afgeleid van Attribute.

Voorbeelden

In het volgende codevoorbeeld ziet u het gebruik van GetCustomAttributes, waarbij een Assembly parameter wordt gebruikt.

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.
open System
open System.Reflection

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

type Example = class end

// Get the Assembly object to access its metadata.
let assembly = typeof<Example>.Assembly

// Iterate through the attributes for the assembly.
for attr in Attribute.GetCustomAttributes assembly do
    match attr with
    // Check for the AssemblyTitle attribute.
    | :? AssemblyTitleAttribute as attr ->    
        printfn $"Assembly title is \"{attr.Title}\"."
    // Check for the AssemblyDescription attribute.
    | :? AssemblyDescriptionAttribute as attr ->
        printfn $"Assembly description is \"{attr.Description}\"."
    // Check for the AssemblyCompany attribute.
    | :? AssemblyCompanyAttribute as attr ->
        printfn $"Assembly company is {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".

Opmerkingen

Note

Vanaf de .NET Framework versie 2.0 retourneert deze methode beveiligingskenmerken als de kenmerken zijn opgeslagen in de nieuwe indeling voor metagegevens. Assembly's die zijn gecompileerd met versie 2.0 of hoger, gebruiken de nieuwe indeling. Dynamische assembly's en assembly's die zijn gecompileerd met eerdere versies van het .NET Framework gebruiken de oude XML-indeling. Zie Declaratieve beveiligingskenmerken verzenden.

Van toepassing op

GetCustomAttributes(Module, Type)

Hiermee haalt u een matrix op van de aangepaste kenmerken die zijn toegepast op een module. Parameters geven de module en het type van het aangepaste kenmerk op dat moet worden gezocht.

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()

Parameters

element
Module

Een object dat is afgeleid van de Module klasse die een draagbaar uitvoerbaar bestand beschrijft.

attributeType
Type

Het type, of een basistype, van het aangepaste kenmerk dat moet worden gezocht.

Retouren

Een Attribute matrix met de aangepaste kenmerken van het type attributeType waarop wordt toegepast element, of een lege matrix als er geen aangepaste kenmerken bestaan.

Uitzonderingen

element of attributeType is null.

attributeType is niet afgeleid van Attribute.

Voorbeelden

In het volgende codevoorbeeld ziet u hoe GetCustomAttributesu een Module parameter als parameter gebruikt.

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".
 */
open System
open 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>]
do ()

type DemoClass = class end

// Get the Module type to access its metadata.
let ilmodule = typeof<DemoClass>.Module

// Iterate through all the attributes for the module.
for attr in Attribute.GetCustomAttributes ilmodule do
    match attr with
    // Check for the Description attribute.
    | :? DescriptionAttribute as attr ->
        printfn $"Module {ilmodule.Name} has the description \"{attr.Description}\"."
                
    // Check for the CLSCompliant attribute.
    | :? CLSCompliantAttribute as attr ->
        printfn $"""Module {ilmodule.Name} {if attr.IsCompliant then "is" else "is not"} CLSCompliant."""
    | _ -> ()
    
// 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.

Van toepassing op

GetCustomAttributes(ParameterInfo, Type)

Hiermee haalt u een matrix op van de aangepaste kenmerken die zijn toegepast op een methodeparameter. Parameters geven de methodeparameter en het type van het aangepaste kenmerk op dat moet worden gezocht.

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()

Parameters

element
ParameterInfo

Een object dat is afgeleid van de ParameterInfo klasse die een parameter beschrijft van een lid van een klasse.

attributeType
Type

Het type, of een basistype, van het aangepaste kenmerk dat moet worden gezocht.

Retouren

Een Attribute matrix met de aangepaste kenmerken van het type attributeType waarop wordt toegepast element, of een lege matrix als er geen aangepaste kenmerken bestaan.

Uitzonderingen

element of attributeType is null.

attributeType is niet afgeleid van Attribute.

Een aangepast kenmerktype kan niet worden geladen.

Voorbeelden

In het volgende codevoorbeeld ziet u hoe GetCustomAttributesu een ParameterInfo parameter als parameter gebruikt.

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 the ParamArray attribute.
 * Parameter args for method ParamArrayAndDesc has a description attribute.
 * The description is: "This argument is a ParamArray"
 */
open System
open System.Reflection
open System.ComponentModel

type AClass() =
    member _.ParamArrayAndDesc(
        // Add ParamArray and Description attributes.
        [<Description "This argument is a ParamArray">]
        [<ParamArray>]
        args: int[]) = ()

// Get the Class type to access its metadata.
let clsType = typeof<AClass>

// Get the type information for the method.
let mInfo = clsType.GetMethod "ParamArrayAndDesc"
if mInfo <> null then
    // Get the parameter information.
    let pInfo = mInfo.GetParameters()
    if pInfo <> null then
        // Iterate through all the attributes for the parameter.
        for attr in Attribute.GetCustomAttributes pInfo[0] do
            match attr with 
            // Check for the ParamArray attribute.
            | :? ParamArrayAttribute ->
                printfn $"Parameter {pInfo[0].Name} for method {mInfo.Name} has the ParamArray attribute."
                                
            // Check for the Description attribute.
            | :? DescriptionAttribute as attr ->
                printfn $"Parameter {pInfo[0].Name} for method {mInfo.Name} has a description attribute."
                printfn $"The description is: \"{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} for method {1} has the " + _
                    "ParamArray attribute.", pInfo(0).Name, mInfo.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} for method {1} has a description " + _
                    "attribute. The description is:", pInfo(0).Name, mInfo.Name)
                Console.WriteLine(descAttr.Description)
            End If
        Next
    End Sub
End Module

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

Opmerkingen

Als element een parameter in een methode van een afgeleid type vertegenwoordigt, bevat de retourwaarde de overgenomen aangepaste kenmerken die zijn toegepast op dezelfde parameter in de overschreven basismethoden.

Van toepassing op

GetCustomAttributes(MemberInfo, Boolean)

Hiermee wordt een matrix opgehaald van de aangepaste kenmerken die zijn toegepast op een lid van een type. Parameters geven het lid, het type aangepast kenmerk op dat moet worden gezocht en of er moet worden gezocht naar bovenliggende voorouders van het lid.

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()

Parameters

element
MemberInfo

Een object dat is afgeleid van de MemberInfo klasse die een constructor, gebeurtenis, veld, methode of eigenschapslid van een klasse beschrijft.

inherit
Boolean

Als true, geeft u ook aan om de voorouderen van element te zoeken naar aangepaste kenmerken.

Retouren

Een Attribute matrix die de aangepaste kenmerken bevat die zijn toegepast elementop of een lege matrix als er geen aangepaste kenmerken bestaan.

Uitzonderingen

element is null.

element is geen constructor, methode, eigenschap, gebeurtenis, type of veld.

Een aangepast kenmerktype kan niet worden geladen.

Voorbeelden

In het volgende codevoorbeeld ziet u hoe GetCustomAttributesu een MemberInfo parameter als parameter gebruikt.

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.

*/
open System
open System.Runtime.InteropServices

// Define an enumeration of Win32 unmanaged types
type UnmanagedType =
    | User = 0
    | GDI = 1
    | Kernel = 2
    | Shell = 3
    | Networking = 4
    | Multimedia = 5

// Define the Unmanaged attribute.
type UnmanagedAttribute(unmanagedType) =
    inherit Attribute()
    
    // Define a property to get and set the UnmanagedType value.
    member val Win32Type = unmanagedType with get, set

// Create a module for an imported Win32 unmanaged function.
module Win32 =
    [<DllImport("user32.dll", CharSet = CharSet.Unicode)>]
    extern int MessageBox(IntPtr hWnd, String text, String caption, uint ``type``)

type AClass() =
    // Add some attributes to Win32CallMethod.
    [<Obsolete "This method is obsolete. Use managed MsgBox instead.">]
    [<Unmanaged(UnmanagedType.User)>]
    member _.Win32CallMethod () =
        Win32.MessageBox(0, "This is an unmanaged call.", "Caution!", 0u)

// Get the AClass type to access its metadata.
let clsType = typeof<AClass>
// Get the type information for Win32CallMethod.
let mInfo = clsType.GetMethod "Win32CallMethod"
if mInfo <> null then
    // Iterate through all the attributes of the method.
    for attr in Attribute.GetCustomAttributes mInfo do
        match attr with 
        // Check for the Obsolete attribute.
        | :? ObsoleteAttribute as attr ->
            printfn $"Method {mInfo.Name} is obsolete. The message is:"
            printfn $"  \"{attr.Message}\""

        // Check for the Unmanaged attribute.
        | :? UnmanagedAttribute as attr ->
            printfn "This method calls unmanaged code."
            printfn $"The Unmanaged attribute type is {attr.Win32Type}."
            let myCls = AClass()
            myCls.Win32CallMethod() |> ignore
        | _ -> ()

// 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.
'

Opmerkingen

De retourwaarde bevat de aangepaste kenmerken voor voorouderen van element als inherit dat het is true.

Note

Vanaf de .NET Framework versie 2.0 retourneert deze methode beveiligingskenmerken op methoden, constructors en typen als de kenmerken worden opgeslagen in de nieuwe metagegevensindeling. Assembly's die zijn gecompileerd met versie 2.0 of hoger, gebruiken de nieuwe indeling. Dynamische assembly's en assembly's die zijn gecompileerd met eerdere versies van het .NET Framework gebruiken de oude XML-indeling. Zie Declaratieve beveiligingskenmerken verzenden.

Van toepassing op

GetCustomAttributes(Assembly, Type)

Hiermee haalt u een matrix op van de aangepaste kenmerken die zijn toegepast op een assembly. Parameters geven de assembly op en het type van het aangepaste kenmerk dat moet worden gezocht.

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()

Parameters

element
Assembly

Een object dat is afgeleid van de Assembly klasse die een herbruikbare verzameling modules beschrijft.

attributeType
Type

Het type, of een basistype, van het aangepaste kenmerk dat moet worden gezocht.

Retouren

Een Attribute matrix met de aangepaste kenmerken van het type attributeType waarop wordt toegepast element, of een lege matrix als er geen aangepaste kenmerken bestaan.

Uitzonderingen

element of attributeType is null.

attributeType is niet afgeleid van Attribute.

Voorbeelden

In het volgende codevoorbeeld ziet u het gebruik van GetCustomAttributes, waarbij een Assembly parameter wordt gebruikt.

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.
open System
open System.Reflection

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

type Example = class end

// Get the Assembly object to access its metadata.
let assembly = typeof<Example>.Assembly

// Iterate through the attributes for the assembly.
for attr in Attribute.GetCustomAttributes assembly do
    match attr with
    // Check for the AssemblyTitle attribute.
    | :? AssemblyTitleAttribute as attr ->    
        printfn $"Assembly title is \"{attr.Title}\"."
    // Check for the AssemblyDescription attribute.
    | :? AssemblyDescriptionAttribute as attr ->
        printfn $"Assembly description is \"{attr.Description}\"."
    // Check for the AssemblyCompany attribute.
    | :? AssemblyCompanyAttribute as attr ->
        printfn $"Assembly company is {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".

Opmerkingen

Note

Vanaf de .NET Framework versie 2.0 retourneert deze methode beveiligingskenmerken als de kenmerken zijn opgeslagen in de nieuwe indeling voor metagegevens. Assembly's die zijn gecompileerd met versie 2.0 of hoger, gebruiken de nieuwe indeling. Dynamische assembly's en assembly's die zijn gecompileerd met eerdere versies van het .NET Framework gebruiken de oude XML-indeling. Zie Declaratieve beveiligingskenmerken verzenden.

Van toepassing op

GetCustomAttributes(Assembly, Boolean)

Hiermee haalt u een matrix op van de aangepaste kenmerken die zijn toegepast op een assembly. Parameters geven de assembly en een genegeerde zoekoptie op.

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()

Parameters

element
Assembly

Een object dat is afgeleid van de Assembly klasse die een herbruikbare verzameling modules beschrijft.

inherit
Boolean

Deze parameter wordt genegeerd en heeft geen invloed op de werking van deze methode.

Retouren

Een Attribute matrix die de aangepaste kenmerken bevat die zijn toegepast elementop of een lege matrix als er geen aangepaste kenmerken bestaan.

Uitzonderingen

element is null.

Voorbeelden

In het volgende codevoorbeeld ziet u het gebruik van GetCustomAttributes, waarbij een Assembly parameter wordt gebruikt.

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.
open System
open System.Reflection

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

type Example = class end

// Get the Assembly object to access its metadata.
let assembly = typeof<Example>.Assembly

// Iterate through the attributes for the assembly.
for attr in Attribute.GetCustomAttributes assembly do
    match attr with
    // Check for the AssemblyTitle attribute.
    | :? AssemblyTitleAttribute as attr ->    
        printfn $"Assembly title is \"{attr.Title}\"."
    // Check for the AssemblyDescription attribute.
    | :? AssemblyDescriptionAttribute as attr ->
        printfn $"Assembly description is \"{attr.Description}\"."
    // Check for the AssemblyCompany attribute.
    | :? AssemblyCompanyAttribute as attr ->
        printfn $"Assembly company is {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".

Van toepassing op

GetCustomAttributes(ParameterInfo)

Hiermee haalt u een matrix op van de aangepaste kenmerken die zijn toegepast op een methodeparameter. Een parameter geeft de methodeparameter op.

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()

Parameters

element
ParameterInfo

Een object dat is afgeleid van de ParameterInfo klasse die een parameter beschrijft van een lid van een klasse.

Retouren

Een Attribute matrix die de aangepaste kenmerken bevat die zijn toegepast elementop of een lege matrix als er geen aangepaste kenmerken bestaan.

Uitzonderingen

element is null.

Een aangepast kenmerktype kan niet worden geladen.

Voorbeelden

In het volgende codevoorbeeld ziet u hoe GetCustomAttributesu een ParameterInfo parameter als parameter gebruikt.

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 the ParamArray attribute.
 * Parameter args for method ParamArrayAndDesc has a description attribute.
 * The description is: "This argument is a ParamArray"
 */
open System
open System.Reflection
open System.ComponentModel

type AClass() =
    member _.ParamArrayAndDesc(
        // Add ParamArray and Description attributes.
        [<Description "This argument is a ParamArray">]
        [<ParamArray>]
        args: int[]) = ()

// Get the Class type to access its metadata.
let clsType = typeof<AClass>

// Get the type information for the method.
let mInfo = clsType.GetMethod "ParamArrayAndDesc"
if mInfo <> null then
    // Get the parameter information.
    let pInfo = mInfo.GetParameters()
    if pInfo <> null then
        // Iterate through all the attributes for the parameter.
        for attr in Attribute.GetCustomAttributes pInfo[0] do
            match attr with 
            // Check for the ParamArray attribute.
            | :? ParamArrayAttribute ->
                printfn $"Parameter {pInfo[0].Name} for method {mInfo.Name} has the ParamArray attribute."
                                
            // Check for the Description attribute.
            | :? DescriptionAttribute as attr ->
                printfn $"Parameter {pInfo[0].Name} for method {mInfo.Name} has a description attribute."
                printfn $"The description is: \"{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} for method {1} has the " + _
                    "ParamArray attribute.", pInfo(0).Name, mInfo.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} for method {1} has a description " + _
                    "attribute. The description is:", pInfo(0).Name, mInfo.Name)
                Console.WriteLine(descAttr.Description)
            End If
        Next
    End Sub
End Module

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

Opmerkingen

Als element een parameter in een methode van een afgeleid type vertegenwoordigt, bevat de retourwaarde de overgenomen aangepaste kenmerken die zijn toegepast op dezelfde parameter in de overschreven basismethoden.

Van toepassing op

GetCustomAttributes(Module)

Hiermee haalt u een matrix op van de aangepaste kenmerken die zijn toegepast op een module. Met een parameter wordt de module opgegeven.

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()

Parameters

element
Module

Een object dat is afgeleid van de Module klasse die een draagbaar uitvoerbaar bestand beschrijft.

Retouren

Een Attribute matrix die de aangepaste kenmerken bevat die zijn toegepast elementop of een lege matrix als er geen aangepaste kenmerken bestaan.

Uitzonderingen

element is null.

Voorbeelden

In het volgende codevoorbeeld ziet u hoe GetCustomAttributesu een Module parameter als parameter gebruikt.

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".
 */
open System
open 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>]
do ()

type DemoClass = class end

// Get the Module type to access its metadata.
let ilmodule = typeof<DemoClass>.Module

// Iterate through all the attributes for the module.
for attr in Attribute.GetCustomAttributes ilmodule do
    match attr with
    // Check for the Description attribute.
    | :? DescriptionAttribute as attr ->
        printfn $"Module {ilmodule.Name} has the description \"{attr.Description}\"."
                
    // Check for the CLSCompliant attribute.
    | :? CLSCompliantAttribute as attr ->
        printfn $"""Module {ilmodule.Name} {if attr.IsCompliant then "is" else "is not"} CLSCompliant."""
    | _ -> ()
    
// 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.

Van toepassing op

GetCustomAttributes(MemberInfo)

Hiermee wordt een matrix opgehaald van de aangepaste kenmerken die zijn toegepast op een lid van een type. Met een parameter wordt het lid opgegeven.

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()

Parameters

element
MemberInfo

Een object dat is afgeleid van de MemberInfo klasse die een constructor, gebeurtenis, veld, methode of eigenschapslid van een klasse beschrijft.

Retouren

Een Attribute matrix die de aangepaste kenmerken bevat die zijn toegepast elementop of een lege matrix als er geen aangepaste kenmerken bestaan.

Uitzonderingen

element is null.

element is geen constructor, methode, eigenschap, gebeurtenis, type of veld.

Een aangepast kenmerktype kan niet worden geladen.

Voorbeelden

In het volgende codevoorbeeld ziet u hoe GetCustomAttributeu een MemberInfo parameter als parameter gebruikt.

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.

*/
open System
open System.Runtime.InteropServices

// Define an enumeration of Win32 unmanaged types
type UnmanagedType =
    | User = 0
    | GDI = 1
    | Kernel = 2
    | Shell = 3
    | Networking = 4
    | Multimedia = 5

// Define the Unmanaged attribute.
type UnmanagedAttribute(unmanagedType) =
    inherit Attribute()
    
    // Define a property to get and set the UnmanagedType value.
    member val Win32Type = unmanagedType with get, set

// Create a module for an imported Win32 unmanaged function.
module Win32 =
    [<DllImport("user32.dll", CharSet = CharSet.Unicode)>]
    extern int MessageBox(IntPtr hWnd, String text, String caption, uint ``type``)

type AClass() =
    // Add some attributes to Win32CallMethod.
    [<Obsolete "This method is obsolete. Use managed MsgBox instead.">]
    [<Unmanaged(UnmanagedType.User)>]
    member _.Win32CallMethod () =
        Win32.MessageBox(0, "This is an unmanaged call.", "Caution!", 0u)

// Get the AClass type to access its metadata.
let clsType = typeof<AClass>
// Get the type information for Win32CallMethod.
let mInfo = clsType.GetMethod "Win32CallMethod"
if mInfo <> null then
    // Iterate through all the attributes of the method.
    for attr in Attribute.GetCustomAttributes mInfo do
        match attr with 
        // Check for the Obsolete attribute.
        | :? ObsoleteAttribute as attr ->
            printfn $"Method {mInfo.Name} is obsolete. The message is:"
            printfn $"  \"{attr.Message}\""

        // Check for the Unmanaged attribute.
        | :? UnmanagedAttribute as attr ->
            printfn "This method calls unmanaged code."
            printfn $"The Unmanaged attribute type is {attr.Win32Type}."
            let myCls = AClass()
            myCls.Win32CallMethod() |> ignore
        | _ -> ()

// 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.
'

Opmerkingen

De retourwaarde bevat de aangepaste kenmerken voor voorouders van element.

Note

Vanaf de .NET Framework versie 2.0 retourneert deze methode beveiligingskenmerken op methoden, constructors en typen als de kenmerken worden opgeslagen in de nieuwe metagegevensindeling. Assembly's die zijn gecompileerd met versie 2.0 of hoger, gebruiken de nieuwe indeling. Dynamische assembly's en assembly's die zijn gecompileerd met eerdere versies van het .NET Framework gebruiken de oude XML-indeling. Zie Declaratieve beveiligingskenmerken verzenden.

Van toepassing op

GetCustomAttributes(Assembly)

Hiermee haalt u een matrix op van de aangepaste kenmerken die zijn toegepast op een assembly. Met een parameter wordt de assembly opgegeven.

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()

Parameters

element
Assembly

Een object dat is afgeleid van de Assembly klasse die een herbruikbare verzameling modules beschrijft.

Retouren

Een Attribute matrix die de aangepaste kenmerken bevat die zijn toegepast elementop of een lege matrix als er geen aangepaste kenmerken bestaan.

Uitzonderingen

element is null.

Voorbeelden

In het volgende voorbeeld worden de aangepaste kenmerken opgehaald die in de huidige assembly zijn gevonden.

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.
open System
open System.Reflection

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

type Example = class end

// Get the Assembly object to access its metadata.
let assembly = typeof<Example>.Assembly

// Iterate through the attributes for the assembly.
for attr in Attribute.GetCustomAttributes assembly do
    match attr with
    // Check for the AssemblyTitle attribute.
    | :? AssemblyTitleAttribute as attr ->    
        printfn $"Assembly title is \"{attr.Title}\"."
    // Check for the AssemblyDescription attribute.
    | :? AssemblyDescriptionAttribute as attr ->
        printfn $"Assembly description is \"{attr.Description}\"."
    // Check for the AssemblyCompany attribute.
    | :? AssemblyCompanyAttribute as attr ->
        printfn $"Assembly company is {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".

Opmerkingen

Note

Vanaf de .NET Framework versie 2.0 retourneert deze methode beveiligingskenmerken als de kenmerken zijn opgeslagen in de nieuwe indeling voor metagegevens. Assembly's die zijn gecompileerd met versie 2.0 of hoger, gebruiken de nieuwe indeling. Dynamische assembly's en assembly's die zijn gecompileerd met eerdere versies van het .NET Framework gebruiken de oude XML-indeling. Zie Declaratieve beveiligingskenmerken verzenden.

Van toepassing op

GetCustomAttributes(Module, Boolean)

Hiermee haalt u een matrix op van de aangepaste kenmerken die zijn toegepast op een module. Parameters geven de module en een genegeerde zoekoptie op.

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()

Parameters

element
Module

Een object dat is afgeleid van de Module klasse die een draagbaar uitvoerbaar bestand beschrijft.

inherit
Boolean

Deze parameter wordt genegeerd en heeft geen invloed op de werking van deze methode.

Retouren

Een Attribute matrix die de aangepaste kenmerken bevat die zijn toegepast elementop of een lege matrix als er geen aangepaste kenmerken bestaan.

Uitzonderingen

element is null.

Voorbeelden

In het volgende codevoorbeeld ziet u hoe GetCustomAttributesu een Module parameter als parameter gebruikt.

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".
 */
open System
open 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>]
do ()

type DemoClass = class end

// Get the Module type to access its metadata.
let ilmodule = typeof<DemoClass>.Module

// Iterate through all the attributes for the module.
for attr in Attribute.GetCustomAttributes ilmodule do
    match attr with
    // Check for the Description attribute.
    | :? DescriptionAttribute as attr ->
        printfn $"Module {ilmodule.Name} has the description \"{attr.Description}\"."
                
    // Check for the CLSCompliant attribute.
    | :? CLSCompliantAttribute as attr ->
        printfn $"""Module {ilmodule.Name} {if attr.IsCompliant then "is" else "is not"} CLSCompliant."""
    | _ -> ()
    
// 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.

Opmerkingen

De retourwaarde bevat de aangepaste kenmerken voor voorouderen van element als inherit dat het is true.

Van toepassing op