none
L'usage des attributs en programmation RRS feed

  • Question

  • Bonjour,

    Je n'ai pas encore bien saisi l'usage des attributs utilisés pour "décorer" les diverses entités d'un programme VB ou C#.

    Pourriez-vous me conseiller un document qui explique cela et qui, éventuellement, fournit quelques exemples.

    Merci beaucoup

     


    Alain
    • Déplacé Alex Petrescu vendredi 25 juin 2010 08:52 question .NET (Origine :Windows Forms)
    jeudi 24 juin 2010 20:50

Réponses

  • Bonjour,

     

    Malheureusement, la plupart des informations sont en anglais. Je n’ai trouvé que cette page MSDN en français, Didacticiel des Attributs.

     

     

    Et quelques articles en anglais :

     

    http://msdn.microsoft.com/fr-fr/library/5x6cd29c(v=VS.71).aspx

    http://msdn.microsoft.com/en-us/library/aa288454(VS.71).aspx

    http://articles.techrepublic.com.com/5100-10878_11-1044870.html

     

     

    Cordialement,

    Alex

    ________________

    Publiez un article sur une de ces technologies : Visual Basic, C#, C++, .NET, ASP.NET, SQL Server, Silverlight, SharePoint 2010, SharePoint 2007

     

    Astuces pour Visual Studio 2010

    Didacticiels et astuces : VB.NET, C#, ASP.NET, .NET Framework, Workflow Foundation

     

     

    Café des usages

     

    Microsoft propose ce service gratuitement, dans le but d'aider les utilisateurs et d'élargir les connaissances générales liées aux produits et technologies Microsoft. Ce contenu est fourni "tel quel" et il n'implique aucune responsabilité de la part de Microsoft.

     

     

    vendredi 25 juin 2010 09:09
  • Bonjour,

    Les attributs s'utilise conjointement avec l'introspection (System.Reflection). Il permettent d'ajouter des informations dans du code. Contrairement aux idées reçu, l'ajout d'attributs ne ralenti en aucun l'execution de votre code.

    Grâce à l'introspection, vous pouvez parcourir vos classes, méthodes,...etc afin de récupérer ces attributs et réaliser une action particulière.

    Avec les attributs, on peut faire un mécanisme de plugin :
    Par exemple, vous créer un attribut MyPluginAttribute. Il faut appliquer cette attribut sur les classes "plugins". Au chargement de votre application, vous utilisez l'introspection afin de rechercher dans différents assembly, les classes contenant l'attribut MyPluginAttribute et vous instanciez ces classes.

    Est-ce que cela répond à votre question ?

    Cordialement


    Gilles TOURREAU - MVP C# - MCTS Windows Forms - Architecte .NET/Consultant/Formateur - http://gilles.tourreau.fr
    • Marqué comme réponse AchLog samedi 26 juin 2010 17:28
    vendredi 25 juin 2010 10:19
    Modérateur
  • Bonjour,

    Comme vous le dites, les attributs sont des commentaires permettant d'ajouter des informations sur des classes, méthodes...etc.

    L'usage des attributs est très varié... Je peux vous donner deux exemples que l'on retrouve dans le .NET Framework :

    • Les attributs DataContract et DataMember. Il sont utilisés par le sérialiseur WCF pour générer ou parser des documents XML. Il suffit de spécifier ces attributs sur vos classes et propriétés et le sérialiseur par introspection récupérent les propriétés à sérialiser ou à désérialiser...
    • Autre exemple : Les attributs Browsable() que l'on place sur les propriétés des contrôles Windows Forms / ASP .NET. Il permet d'indiquer au designer de Visual Studio si il doit afficher la propriété dans la fenêtre des propriétés au moment de l'édition...
    • ...etc

    Est-ce que cela répond à votre question ?

    Cordialement


    Gilles TOURREAU - MVP C# - MCTS Windows Forms - Architecte .NET/Consultant/Formateur - http://gilles.tourreau.fr
    • Marqué comme réponse AchLog dimanche 27 juin 2010 22:32
    dimanche 27 juin 2010 21:18
    Modérateur
  • Bonjour,

    Cet article m'a beaucoup eveiller sur l'utilisation et la créations de mes propes attributs http://www.codeproject.com/KB/cs/attributes.aspx.

    Cordialement

    Merci à tous

    mercredi 15 décembre 2010 13:40

Toutes les réponses

  • Bonjour,

     

    Malheureusement, la plupart des informations sont en anglais. Je n’ai trouvé que cette page MSDN en français, Didacticiel des Attributs.

     

     

    Et quelques articles en anglais :

     

    http://msdn.microsoft.com/fr-fr/library/5x6cd29c(v=VS.71).aspx

    http://msdn.microsoft.com/en-us/library/aa288454(VS.71).aspx

    http://articles.techrepublic.com.com/5100-10878_11-1044870.html

     

     

    Cordialement,

    Alex

    ________________

    Publiez un article sur une de ces technologies : Visual Basic, C#, C++, .NET, ASP.NET, SQL Server, Silverlight, SharePoint 2010, SharePoint 2007

     

    Astuces pour Visual Studio 2010

    Didacticiels et astuces : VB.NET, C#, ASP.NET, .NET Framework, Workflow Foundation

     

     

    Café des usages

     

    Microsoft propose ce service gratuitement, dans le but d'aider les utilisateurs et d'élargir les connaissances générales liées aux produits et technologies Microsoft. Ce contenu est fourni "tel quel" et il n'implique aucune responsabilité de la part de Microsoft.

     

     

    vendredi 25 juin 2010 09:09
  • Bonjour,

    Les attributs s'utilise conjointement avec l'introspection (System.Reflection). Il permettent d'ajouter des informations dans du code. Contrairement aux idées reçu, l'ajout d'attributs ne ralenti en aucun l'execution de votre code.

    Grâce à l'introspection, vous pouvez parcourir vos classes, méthodes,...etc afin de récupérer ces attributs et réaliser une action particulière.

    Avec les attributs, on peut faire un mécanisme de plugin :
    Par exemple, vous créer un attribut MyPluginAttribute. Il faut appliquer cette attribut sur les classes "plugins". Au chargement de votre application, vous utilisez l'introspection afin de rechercher dans différents assembly, les classes contenant l'attribut MyPluginAttribute et vous instanciez ces classes.

    Est-ce que cela répond à votre question ?

    Cordialement


    Gilles TOURREAU - MVP C# - MCTS Windows Forms - Architecte .NET/Consultant/Formateur - http://gilles.tourreau.fr
    • Marqué comme réponse AchLog samedi 26 juin 2010 17:28
    vendredi 25 juin 2010 10:19
    Modérateur
  • Merci Alex, je vais lire ces documents. L'anglais ne me gêne pas trop bien que je préfère le français.

    Ce qui est important pour moi est d'avoir une vision conceptuelle de l'usage des attributs.

    Cordialement

     


    Alain
    vendredi 25 juin 2010 11:35
  • Bonjour Gilles,

    Merci de votre réponse.

    Un petit exemple pratique serait le bien venu, à moins que je ne le trouve en suivant les liens proposés par Alex.

    Cordialement

     


    Alain
    vendredi 25 juin 2010 11:36
  • Bonjour,

    Etant donné que vous me posez des questions claires, que vous suivez vos discussions et que vous me remerciez à chaque réponse, je ne peux que passer un peu de temps à vous faire un petit exemple :

    Nous allons déclarer tout d'abord un attribut dans un projet de type "Console". Cet attribut se mettra au dessus des classes qui seront instanciées et qui représenteront des plugins. Cet attribut doit hériter obligatoirement de la classe Attribute. On peut rajouter si l'on souhaite des propriétés, par exemple j'ai rajouté la propriété Name afin que l'on puisse spécifier un nom au plugin lors de l'utilisation de l'attribut.

    ' AttributeUsage permet de dire que l'attribute ne peut se mettre que sur des classes
    <AttributeUsage(AttributeTargets.Class)> _
    Public Class PluginAttribute
     Inherits Attribute
    
     Private _name As String
    
     Public Sub New(ByVal name As String)
      Me._name = name
     End Sub
    
     Public ReadOnly Property Name As String
      Get
       Return Me._name
      End Get
     End Property
    
    End Class

    Ensuite, nous créons deux classes dans le même projet qui représentent des "plugins" différents :

    <PluginAttribute("Gilles")>
    Public Class GillesPlugin
     Public Sub New()
      Console.WriteLine("Vous venez d'instancier GillesPlugin !")
     End Sub
    End Class
    
    <PluginAttribute("AchLog")>
    Public Class AchLogPlugin
     Public Sub New()
      Console.WriteLine("Vous venez d'instancier AchLogPlugin !")
     End Sub
    End Class
    

    Maintenant nous pouvez dans le Main() de l'application Console, prendre l'assembly en cours d'exécution (l'application console), parcourir toutes les classes contenues dans celle-ci, y récupérer les classes contenant des attributs PluginAttribute et instancier ces classes :

    Imports System.IO
    Imports System.Reflection
    
    Public Class Program
     Public Shared Sub Main()
    
      ' Récupérer l'assembly en cours d'exécution
      Dim a As Assembly
    
      a = Assembly.GetExecutingAssembly()
    
      ' Parcourir toutes les classes (type) contenues dans l'assembly
      For Each t As Type In a.GetTypes()
    
       'Pour une classe, récupérer les attributs de type PluginAttribute
       Dim attributs As PluginAttribute()
    
       attributs = t.GetCustomAttributes(GetType(PluginAttribute), False).Cast(Of PluginAttribute).ToArray()
    
       ' Vérifier si la classe contient au moins un attribut de type PluginAttibute
       If attributs.Length > 0 Then
        Console.WriteLine("Nous allons instancier le plugin ayant comme nom : " + attributs(0).Name)
        Console.WriteLine("La classe instanciée s'appelle : " + t.FullName)
    
        ' Instancier le plugin
        Dim plugin As Object
        plugin = Activator.CreateInstance(t)
       End If
      Next
    
     End Sub
    End Class

    En espérant que cette exemple éclaire votre lanterne... Une chose à retenir c'est que les attributs s'utilise avec l'introspection (System.Reflection) qui permet de parcourir vos classes...

    C'est un exemple très simple pour l'utilisation des attributs, sachez que l'on peut faire plein d'autres choses avec les attributs...

    Cordialement


    Gilles TOURREAU - MVP C# - MCTS Windows Forms - Architecte .NET/Consultant/Formateur - http://gilles.tourreau.fr
    samedi 26 juin 2010 19:42
    Modérateur
  • Bonjour Gilles et un grand merci pour cet exemple qui m'éclaire bien, en effet, sur le principe de fonctionnement des attributs et aussi sur leur utilisation que j'entrevois, au travers de la notion de plugins en particulier.

    On peut considérer ces attributs comme des commentaires permettant de choisir un objet plutôt qu'un autre, parmi ceux qui sont disponibles dans un assembly. De plus, je vois que même les objet "Private" sont énumérables dans l'assembly (j'ai fait l'essai) !

    Pouvez-vous dire, d'après votre expérience, quels sont les principaux usages des attributs ?

    Bien cordialement et merci de consacrer autant de votre temps à répondre aux questions des utilisateurs. Les sujets sont très nombreux et se complexifient sans cesse...

     

     


    Alain
    dimanche 27 juin 2010 13:34
  • Bonjour,

    Comme vous le dites, les attributs sont des commentaires permettant d'ajouter des informations sur des classes, méthodes...etc.

    L'usage des attributs est très varié... Je peux vous donner deux exemples que l'on retrouve dans le .NET Framework :

    • Les attributs DataContract et DataMember. Il sont utilisés par le sérialiseur WCF pour générer ou parser des documents XML. Il suffit de spécifier ces attributs sur vos classes et propriétés et le sérialiseur par introspection récupérent les propriétés à sérialiser ou à désérialiser...
    • Autre exemple : Les attributs Browsable() que l'on place sur les propriétés des contrôles Windows Forms / ASP .NET. Il permet d'indiquer au designer de Visual Studio si il doit afficher la propriété dans la fenêtre des propriétés au moment de l'édition...
    • ...etc

    Est-ce que cela répond à votre question ?

    Cordialement


    Gilles TOURREAU - MVP C# - MCTS Windows Forms - Architecte .NET/Consultant/Formateur - http://gilles.tourreau.fr
    • Marqué comme réponse AchLog dimanche 27 juin 2010 22:32
    dimanche 27 juin 2010 21:18
    Modérateur
  • Cela répond parfaitement à ma question.

    Merci Gilles de votre implication.

    Cordialement

     


    Alain
    dimanche 27 juin 2010 22:32
  • Bonjour,

    Cet article m'a beaucoup eveiller sur l'utilisation et la créations de mes propes attributs http://www.codeproject.com/KB/cs/attributes.aspx.

    Cordialement

    Merci à tous

    mercredi 15 décembre 2010 13:40
  • Merci Punch Line pour cette référence complémentaire, toujours utile.

    Bien cordialement

     


    Alain
    jeudi 16 décembre 2010 10:20