Applicazione di attributi
Aggiornamento: novembre 2007
Per applicare un attributo a un elemento del codice utilizzare la seguente procedura.
Definire un nuovo attributo o utilizzare un attributo esistente importandone lo spazio dei nomi da .NET Framework.
Applicare l'attributo all'elemento di codice posizionandolo immediatamente prima dell'elemento.
Ogni linguaggio ha una propria sintassi di attributo. In C++ e C# l'attributo è racchiuso tra parentesi quadre e separato dall'elemento da uno spazio, che può includere un'interruzione di riga. In Visual Basic l'attributo è racchiuso tra parentesi angolari e deve essere presente sulla stessa riga logica. È possibile utilizzare il carattere di continuazione di riga se si desidera inserire un'interruzione di riga. In J# l'attributo viene collegato utilizzando una sintassi di commento speciale.
Specificare i parametri posizionali e i parametri denominati per l'attributo.
I parametri posizionali sono obbligatori e devono precedere eventuali parametri denominati. Corrispondono ai parametri di uno dei costruttori dell'attributo. I parametri denominati sono facoltativi e corrispondono a proprietà di lettura/scrittura dell'attributo. In C++, C# e J# specificare name=value per ogni parametro facoltativo, dove name è il nome della proprietà. In Visual Basic specificare name:=value.
L'attributo viene emesso nei metadati quando si compila il codice ed è disponibile per Common Language Runtime e qualsiasi strumento o applicazione tramite i servizi di reflection in fase di esecuzione.
Per convenzione tutti i nomi di attributo terminano con Attribute. In diversi linguaggi destinati alla fase di esecuzione, quali Visual Basic e C#, non è tuttavia necessario specificare il nome completo degli attributi. Se si desidera inizializzare, ad esempio, System.ObsoleteAttribute sarà sufficiente farvi riferimento come Obsolete.
Applicazione di un attributo a un metodo
Nell'esempio di codice riportato di seguito si illustra come dichiarare l'attributo System.ObsoleteAttribute, che contrassegna il codice come obsoleto. La stringa "Will be removed in next version" viene passata all'attributo. Questo attributo fa sì che, quando viene chiamato il codice descritto dall'attributo stesso, venga generato un avviso del compilatore che visualizza la stringa passata.
using System;
public class Example
{
// Specify attributes between square brackets in C#.
// This attribute is applied only to the Add method.
[Obsolete("Will be removed in next version.")]
public static int Add(int a, int b)
{
return (a + b);
}
}
class Test
{
static void Main()
{
// This generates a compile-time warning.
int i = Example.Add(2, 2);
}
}
using namespace System;
public ref class Example
{
public:
// Specify attributes between square brackets in C++.
// This attribute is applied only to the Add method.
[Obsolete("Will be removed in next version ")]
static int Add(int a, int b)
{
return (a + b);
}
};
void main()
{
// This generates a compile-time warning.
int i = Example::Add(2, 2);
return;
}
Imports System
Public Class Example
' Specify attributes between angle brackets in Visual Basic,
' and keep them on the same logical line.
' This attribute is applied only to the Add method.
<Obsolete("Will be removed in next version ")> _
Public Shared Function Add(ByVal a As Integer, ByVal b As Integer) As Integer
Return a + b
End Function
End Class
Module Test
Sub Main()
' This generates a compile-time warning.
Dim i As Integer = Example.Add(2, 2)
End Sub
End Module
import System.*;
public class Example
{
// Specify attributes with comment syntax in J#.
// This attribute is applied only to the Add method.
/** @attribute Obsolete("Will be removed in next version") */
public static int Add(int a, int b)
{
return (a + b);
}
}
class Test
{
public static void main()
{
// This generates a compile-time warning.
int MyInt = Example.Add(2,2);
}
}
Applicazione di attributi a livello di assembly
Se si desidera applicare un attributo a livello di assembly utilizzare la parola chiave Assembly. Nel codice riportato di seguito si illustra l'attributo AssemblyNameAttribute applicato a livello di assembly.
using System.Reflection;
[assembly:AssemblyName("MyAssembly")]
using namespace System::Reflection;
[assembly:AssemblyName("MyAssembly")]
Imports System.Reflection
<Assembly:AssemblyName("MyAssembly")>
import System.Reflection.*;
/** @assembly AssemblyName("MyAssembly") */
All'applicazione di questo attributo la stringa "MyAssembly" viene inserita nel manifesto dell'assembly nella porzione del file costituita da metadati. È possibile visualizzare l'attributo sia mediante lo strumento MSIL Disassembler (Ildasm.exe) sia creando un programma personalizzato che recuperi l'attributo.
Vedere anche
Concetti
Recupero di informazioni memorizzate negli attributi
Riferimenti
Utilizzo di attributi (Guida per programmatori C#)