Partager via


Application des attributs

Mise à jour : novembre 2007

L'application d'attributs s'effectue par l'ajout de blocs d'attributs à des éléments de programme, tels que propriétés, méthodes, événements, classes et assemblys. Un bloc d'attributs se compose d'une liste de déclarations attribute séparées par des virgules et encadrée par des crochets pointus (< >). Une déclaration attribute consiste en un modificateur d'attribut facultatif, comme Module ou Assembly, en un nom d'attribut, en une liste (éventuellement surchargée) de paramètres positionnels requis et en une liste d'arguments nommés facultatifs. Vous devez placer les attributs avec des modificateurs dans une section d'attributs en haut d'un fichier source. Par exemple, le code suivant définit un attribut d'assembly qui détermine un titre pour l'assembly et un attribut de module indiquant que le module est conforme CLS (Common Language Specification) :

Imports System.Reflection
<Assembly: AssemblyTitleAttribute("Production assembly 4"), _
Module: CLSCompliant(True)> 

Les attributs d'assembly peuvent également être appliqués à l'aide du fichier AssemblyInfo.vb qui est automatiquement ajouté aux projets via l'interface utilisateur de Visual Studio. Ce fichier contient des attributs d'assembly dotés soit de valeurs par défaut, soit de valeurs vides.

Lorsqu'ils sont appliqués aux éléments de programme (par exemple, aux propriétés), les attributs précèdent l'élément. Par exemple, le code suivant applique un attribut à une définition de classe :

<CustomAttr(Update:=True)> Class Class1

Par convention, tous les noms d'attributs se terminent par le mot « Attribute » de façon à les distinguer des autres éléments du .NET Framework. Cependant, vous n'êtes pas obligé de spécifier le suffixe d'attribut lorsque vous employez des attributs. Prenons par exemple un attribut intitulé CustomAttrAttribute : <CustomAttr(Update:=True)> est l'équivalent de <CustomAttrAttribute(Update:=True)>.

Arguments d'attribut

À la manière des objets, les attributs utilisent des arguments optionnels, obligatoires, positionnels et nommés. Les arguments positionnels sont des arguments qui sont spécifiés dans l'ordre dans lequel ils sont déclarés pour le constructeur d'un attribut. Par exemple, le code suivant appelle le constructeur Sub New d'un attribut possédant deux valeurs :

<CustomAttr(True, False)> Class Class1

Les arguments passés à Sub New dans les classes d'attributs sont souvent employés pour initialiser les valeurs des champs et propriétés.

Vous pouvez recourir à des arguments nommés pour définir directement la valeur des propriétés et champs. Pour spécifier un argument nommé, placez ":=" à la fin du nom de l'argument, suivi de la valeur définie. Contrairement aux arguments positionnels, les arguments nommés peuvent être spécifiés dans n'importe quel ordre. Par exemple, le code suivant attribue la valeur True au champ Update et la valeur False au champ Keep :

<CustomAttr(Update:=True, Keep:=False)> Class Class1
Remarque :

Les arguments d'attributs présentent une différence importante par rapport aux arguments utilisés avec les appels de méthode standard. Vous devez avoir recours à des arguments positionnels employés avec le constructeur Sub New de classes d'attributs. Les arguments nommés ne peuvent être utilisés que pour définir les valeurs des champs et des propriétés des classes d'attributs.

Les arguments obligatoires sont ceux qui doivent toujours être spécifiés. Quant aux arguments optionnels, il s'agit d'arguments qui peuvent être omis, soit par l'emploi d'une virgule comme espace réservé lors de l'utilisation d'arguments positionnels, soit par leur absence pure et simple lors de l'utilisation d'arguments nommés.

Les arguments d'attributs doivent être des expressions constantes.

Exemples d'attributs

Les procédures suivantes contiennent des exemples de déclarations attribute :

Pour utiliser l'attribut MarshalAs afin de contrôler la manière dont les paramètres sont marshalés

  1. Ajoutez une instruction Imports à l'espace de noms System.Runtime.InteropServices en haut de votre code source :

    Imports System.Runtime.InteropServices
    
  2. Faites précéder les paramètres de l'attribut MarshalAsAttribute et spécifiez le type de données requis par la cible. Par exemple, le code suivant marshale deux paramètres comme type de données de pointeur long en string (LPStr) pour une fonction API Windows :

    Declare Auto Sub CopyFile Lib "Kernel32.Lib" ( _
       <MarshalAs(UnmanagedType.LPWStr)> ByVal existingfile As String, _
       <MarshalAs(UnmanagedType.LPWStr)> ByVal newfile As String, _
       ByVal failifexists As Boolean _
    )
    

Le Common Language Runtime (CLR) utilise l'attribut MarshalAsAttribute pour déterminer comment un paramètre doit être marshalé entre le code managé de Visual Basic et le code non managé d'un appel d'API Windows.

Pour exposer une méthode à des clients Web distants

  1. Dans le menu Fichier, cliquez sur Projet, sélectionnez le modèle Service Web ASP.NET et ajoutez une instruction Imports pour l'espace de noms System.Web :

    Imports System.Web.Services
    
  2. Définissez une méthode et, à l'aide de l'attribut WebMethodAttribute, faites en sorte qu'elle puisse être appelée à partir de clients Web distants :

    <WebMethod()> Public Function HelloWorld() As String
        HelloWorld = "Hello World..."
    End Function
    

Il ne suffit pas de rendre Public une méthode d'un service Web XML pour l'exposer aux clients Web. L'attribut WebMethodAttribute doit être appliqué explicitement à une méthode pour que cette dernière puisse être appelée par un client Web distant.

Voir aussi

Tâches

Comment : définir vos propres attributs

Concepts

Vue d'ensemble des attributs dans Visual Basic

Utilisations courantes des attributs

Passage des arguments par position et par nom

Référence

WebMethodAttribute

Imports, instruction (espace de noms et type .NET)

MarshalAsAttribute

System.Web

Autres ressources

Attributs personnalisés en Visual Basic