A documentação da classe DefaultValueAttribute é confusa

Este artigo explica a documentação confusa da classe DefaultValueAttribute .

Versão original do produto: .NET Framework
Número de KB original: 311339

Resumo

A documentação da DefaultValueAttribute classe pode ser confusa. Em particular, essa documentação afirma:
O valor padrão de um membro normalmente é seu valor inicial.

A partir disso, você pode concluir que, se definir o DefaultValue atributo para uma propriedade, a propriedade será inicializada para esse valor. No entanto, você deve definir o atributo da DefaultValue propriedade igual ao valor inicializado.

Mais informações

O tópico Estender metadados usando atributos afirma:

O runtime de linguagem comum permite adicionar declarações descritivas semelhantes a palavra-chave, chamadas atributos, para anotar elementos de programação, como tipos, campos, métodos e propriedades. Os atributos são salvos com os metadados de um arquivo microsoft .NET Framework e podem ser usados para descrever seu código para o runtime ou para afetar o comportamento do aplicativo em tempo de execução.

Se o atributo da propriedade for igual ao valor inicializado, você poderá acessar os metadados da propriedade para determinar o valor padrão. Em seguida, você pode usar esse valor padrão para redefinir a variável de membro correspondente, se necessário. Você também pode gravar geradores de código para usar o DefaultValue atributo para determinar se o código deve ser gerado para a variável membro. Você deve determinar se o código deve ser gerado para que a variável membro defina seu valor inicial corretamente.

No entanto, o DefaultValue atributo não faz com que o valor inicial seja inicializado com o valor do atributo. Por exemplo, no exemplo de código a seguir, a IsValueSet propriedade tem um valor padrão de True e também é inicializada para um valor de True. Se não for inicializado, o valor inicial de 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

Para obter mais informações sobre como aplicar atributos para que eles forneçam metadados ao runtime de linguagem comum, consulte Estender metadados usando atributos.

Como você pode exibir componentes em um designer como Visual Studio .NET ou Visual Studio, os componentes exigem atributos que fornecem metadados para ferramentas de tempo de design.

Para exibir seu controle e seus membros corretamente no momento do design, os atributos de tempo de design são essenciais porque fornecem informações valiosas para uma ferramenta de design visual. Por exemplo, no fragmento de código a seguir, o CategoryAttribute atributo permite que o navegador de propriedades exiba a TextAlignment propriedade na Alignment categoria. O DescriptionAttribute atributo permite que o navegador de propriedade forneça uma breve descrição da propriedade quando um usuário clica nela.

[
    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

Observação

No Visual C# .NET, Visual Basic .NET ou Visual Basic, você pode referenciar uma classe de atributo chamada AttributeNameAttribute simplesmente como AttributeName na sintaxe de atributo.

Referências

Para obter mais informações, consulte Visão geral de atributos.