La documentation de la classe DefaultValueAttribute est déroutante

Cet article explique la documentation déroutante de la classe DefaultValueAttribute .

Version d’origine du produit : .NET Framework
Numéro de la base de connaissances d’origine : 311339

Résumé

La documentation de la DefaultValueAttribute classe peut prêter à confusion. En particulier, cette documentation indique :
La valeur par défaut d’un membre est généralement sa valeur initiale.

À partir de là, vous pouvez conclure que si vous définissez l’attribut DefaultValue pour une propriété, la propriété est initialisée sur cette valeur. Toutefois, vous devez définir l’attribut de DefaultValue la propriété sur sa valeur initialisée.

Plus d’informations

La rubrique Extension des métadonnées à l’aide d’attributs états :

Le Common Language Runtime vous permet d’ajouter des déclarations descriptives de type mot clé, appelées attributs, pour annoter des éléments de programmation tels que des types, des champs, des méthodes et des propriétés. Les attributs sont enregistrés avec les métadonnées d’un fichier Microsoft .NET Framework et peuvent être utilisés pour décrire votre code au runtime ou pour affecter le comportement de l’application au moment de l’exécution.

Si l’attribut de la propriété est égal à sa valeur initialisée, vous pouvez accéder aux métadonnées de la propriété pour déterminer la valeur par défaut. Vous pouvez ensuite utiliser cette valeur par défaut pour réinitialiser la variable membre correspondante si nécessaire. Vous pouvez également écrire des générateurs de code pour utiliser l’attribut DefaultValue afin de déterminer si le code doit être généré pour la variable membre. Vous devez déterminer si du code doit être généré pour que la variable membre définisse correctement sa valeur initiale.

Toutefois, l’attribut DefaultValue n’entraîne pas l’initialisation de la valeur initiale avec la valeur de l’attribut. Par exemple, dans l’exemple de code suivant, la IsValueSet propriété a la valeur par défaut True et est également initialisée à la valeur True. S’il n’est pas initialisé, la valeur initiale de m_isValueSet est False.

Imports System.ComponentModel
Public Class DefaultAttributeSample
    ' You must still initialize your member variable to its default value;
    ' the DefaultValue attribute does not do this.
    Private m_isValueSet As Boolean = True
    ' The DefaultValue attribute should be equal to the member's initial
    ' value.
    <DefaultValueAttribute(True)> _
    Public Property IsValueSet() As Boolean
        Get
            IsValueSet = m_isValueSet
        End Get
        Set(ByVal Value As Boolean)
            m_isValueSet = Value
        End Set
    End Property
End Class

Pour plus d’informations sur la façon d’appliquer des attributs afin qu’ils fournissent des métadonnées au Common Language Runtime, consultez Extension des métadonnées à l’aide d’attributs.

Étant donné que vous pouvez afficher des composants dans un concepteur tel que Visual Studio .NET ou Visual Studio, les composants nécessitent des attributs qui fournissent des métadonnées aux outils au moment du design.

Pour afficher correctement votre contrôle et ses membres au moment du design, les attributs au moment du design sont essentiels, car ils fournissent des informations précieuses à un outil de conception visuelle. Par exemple, dans le fragment de code suivant, l’attribut CategoryAttribute permet à l’explorateur de propriétés d’afficher la TextAlignment propriété dans la Alignment catégorie . L’attribut DescriptionAttribute permet à l’explorateur de propriétés de fournir une brève description de la propriété lorsqu’un utilisateur clique dessus.

[
    Category ("Alignment"),
    Description ("Specifies the alignment of text.")
]
public ContentAlignment TextAlignment { //... }
<Category("Alignment"), _
Description("Specifies the alignment of text.")> _
Public Property TextAlignment As ContentAlignment
    ' ...
End Property

Remarque

Dans Visual C# .NET, Visual Basic .NET ou Visual Basic, vous pouvez référencer une classe d’attribut nommée AttributeNameAttribute simplement comme AttributeName dans la syntaxe d’attribut.

References

Pour plus d’informations, consultez Vue d’ensemble des attributs.