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.
Comentários
https://aka.ms/ContentUserFeedback.
Brevemente: Ao longo de 2024, vamos descontinuar progressivamente o GitHub Issues como mecanismo de feedback para conteúdos e substituí-lo por um novo sistema de feedback. Para obter mais informações, veja:Submeter e ver comentários