Per visualizzare l'articolo in inglese, selezionare la casella di controllo Inglese. È possibile anche visualizzare il testo inglese in una finestra popup posizionando il puntatore del mouse sopra il testo.
Traduzione
Inglese
Questa documentazione è stata archiviata e non viene gestita.

Metodo Attribute.GetCustomAttributes (MemberInfo, Boolean)

Recupera una matrice degli attributi personalizzati applicata al membro di un tipo. I parametri consentono di specificare il membro, il tipo dell'attributo personalizzato di cui eseguire la ricerca e la ricerca di eventuali predecessori del membro.

Spazio dei nomi:  System
Assembly:  mscorlib (in mscorlib.dll)

public static Attribute[] GetCustomAttributes(
	MemberInfo element,
	bool inherit
)

Parametri

element
Tipo: System.Reflection.MemberInfo
Un oggetto derivato dalla classe MemberInfo che descrive un costruttore, un evento, un campo, un metodo o un membro di proprietà di una classe.
inherit
Tipo: System.Boolean
Se è true, specifica di ricercare anche gli attributi personalizzati nei predecessori di element.

Valore restituito

Tipo: System.Attribute[]
Matrice Attribute contenente gli attributi personalizzati applicati a element oppure matrice vuota se non sono presenti tali attributi.

EccezioneCondizione
ArgumentNullException

element è null.

NotSupportedException

element non è un costruttore, un metodo, una proprietà, un evento, un tipo o un campo.

TypeLoadException

Impossibile caricare il tipo di attributo personalizzato.

Il valore restituito contiene gli attributi personalizzati dei predecessori di element se inherit è true.

NotaNota

A partire da .NET Framework versione 2.0 questo metodo restituisce gli attributi di sicurezza su metodi, costruttori e tipi se gli attributi sono archiviati nel nuovo formato dei metadati. Per gli assembly compilati con la versione 2.0 o successiva viene utilizzato il nuovo formato. Per gli assembly dinamici e quelli compilati con versioni precedenti di .NET Framework viene utilizzato il formato XML precedente. Vedere Creazione di attributi di sicurezza dichiarativa.

Nell'esempio di codice riportato di seguito viene illustrato l'utilizzo di GetCustomAttributes, accettando MemberInfo come parametro.


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.

*/



.NET Framework

Supportato in: 4, 3.5, 3.0, 2.0, 1.1, 1.0

.NET Framework Client Profile

Supportato in: 4, 3.5 SP1

Supportato in:

Windows 7, Windows Vista SP1 o versione successiva, Windows XP SP3, Windows XP SP2 x64 Edition, Windows Server 2008 (componenti di base del server non supportati), Windows Server 2008 R2 (componenti di base del server supportati con SP1 o versione successiva), Windows Server 2003 SP2

.NET Framework non supporta tutte le versioni di ciascuna piattaforma. Per un elenco delle versioni supportate, vedere Requisiti di sistema di .NET Framework.
Mostra: