La documentazione per la classe DefaultValueAttribute crea confusione

Questo articolo illustra la documentazione confusa per la classe DefaultValueAttribute .

Versione originale del prodotto: .NET Framework
Numero KB originale: 311339

Riepilogo

La documentazione per la DefaultValueAttribute classe potrebbe creare confusione. In particolare, questa documentazione indica:
Il valore predefinito di un membro è in genere il valore iniziale.

Da questo, è possibile concludere che se si imposta l'attributo DefaultValue per una proprietà, la proprietà viene inizializzata su tale valore. Tuttavia, è necessario impostare l'attributo della DefaultValue proprietà su un valore inizializzato.

Ulteriori informazioni

L'argomento Extending Metadata Using Attributes (Estensione dei metadati tramite attributi) indica:

Common Language Runtime consente di aggiungere dichiarazioni descrittive simili a parole chiave, denominate attributi, per annotare elementi di programmazione come tipi, campi, metodi e proprietà. Gli attributi vengono salvati con i metadati di un file di Microsoft .NET Framework e possono essere usati per descrivere il codice nel runtime o per influire sul comportamento dell'applicazione in fase di esecuzione.

Se l'attributo della proprietà è uguale al valore inizializzato, è possibile accedere ai metadati della proprietà per determinare il valore predefinito. È quindi possibile usare questo valore predefinito per reimpostare la variabile membro corrispondente, se necessario. È anche possibile scrivere generatori di codice per usare l'attributo DefaultValue per determinare se il codice deve essere generato per la variabile membro. È necessario determinare se il codice deve essere generato per la variabile membro per impostare correttamente il valore iniziale.

Tuttavia, l'attributo DefaultValue non causa l'inizializzazione del valore iniziale con il valore dell'attributo. Nell'esempio di codice seguente, ad esempio, la IsValueSet proprietà ha un valore predefinito True e viene inizializzata anche su un valore True. Se non inizializzato, il valore iniziale di m_isValueSet è 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

Per altre informazioni su come applicare gli attributi in modo che forniscano metadati a Common Language Runtime, vedere Estensione dei metadati tramite attributi.

Poiché è possibile visualizzare i componenti in una finestra di progettazione, ad esempio Visual Studio .NET o Visual Studio, i componenti richiedono attributi che forniscono metadati agli strumenti della fase di progettazione.

Per visualizzare correttamente il controllo e i relativi membri in fase di progettazione, gli attributi in fase di progettazione sono essenziali perché forniscono informazioni preziose a uno strumento di progettazione visiva. Nel frammento di codice seguente, ad esempio, l'attributo CategoryAttribute consente al visualizzatore proprietà di visualizzare la TextAlignment proprietà nella Alignment categoria. L'attributo DescriptionAttribute consente al visualizzatore proprietà di fornire una breve descrizione della proprietà quando un utente fa clic su di essa.

[
    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

Nota

In Visual C# .NET, Visual Basic .NET o Visual Basic è possibile fare riferimento a una classe di attributi denominata AttributeNameAttribute semplicemente come AttributeName nella sintassi dell'attributo.

Riferimenti

Per altre informazioni, vedere Panoramica degli attributi.