Meilleur auteur de réponses
L'usage des attributs en programmation

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)
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
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.
- Proposé comme réponse Gabriel MongeonModerator samedi 26 juin 2010 13:41
- Marqué comme réponse AchLog samedi 26 juin 2010 17:28
-
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
-
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
-
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
- Marqué comme réponse Gilles TOURREAUModerator mercredi 15 décembre 2010 14:09
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
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.
- Proposé comme réponse Gabriel MongeonModerator samedi 26 juin 2010 13:41
- Marqué comme réponse AchLog samedi 26 juin 2010 17:28
-
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
-
-
-
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 -
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 -
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
-
-
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
- Marqué comme réponse Gilles TOURREAUModerator mercredi 15 décembre 2010 14:09
-