La documentación de la clase DefaultValueAttribute es confusa

En este artículo se explica la documentación confusa de la clase DefaultValueAttribute .

Versión original del producto: .NET Framework
Número de KB original: 311339

Resumen

La documentación de la DefaultValueAttribute clase puede resultar confusa. En concreto, en esta documentación se indica lo siguiente:
El valor predeterminado de un miembro suele ser su valor inicial.

A partir de esto, puede concluir que si establece el DefaultValue atributo para una propiedad, la propiedad se inicializa en ese valor. Sin embargo, debe establecer el atributo de DefaultValue la propiedad igual a su valor inicializado.

Más información

En el tema Extensión de metadatos mediante atributos se indica lo siguiente:

Common Language Runtime permite agregar declaraciones descriptivas similares a palabras clave, denominadas atributos, para anotar elementos de programación como tipos, campos, métodos y propiedades. Los atributos se guardan con los metadatos de un archivo de Microsoft .NET Framework y se pueden usar para describir el código en tiempo de ejecución o para afectar al comportamiento de la aplicación en tiempo de ejecución.

Si el atributo de la propiedad es igual a su valor inicializado, puede acceder a los metadatos de la propiedad para determinar el valor predeterminado. A continuación, puede usar este valor predeterminado para restablecer la variable miembro correspondiente si es necesario. También puede escribir generadores de código para usar el DefaultValue atributo para determinar si se debe generar código para la variable miembro. Debe determinar si se debe generar código para que la variable miembro establezca correctamente su valor inicial.

Sin embargo, el DefaultValue atributo no hace que el valor inicial se inicialice con el valor del atributo. Por ejemplo, en el ejemplo de código siguiente, la IsValueSet propiedad tiene un valor predeterminado de True y también se inicializa en un valor de True. Si no se inicializa, el valor inicial de m_isValueSet es 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 obtener más información sobre cómo aplicar atributos para que proporcionen metadatos a Common Language Runtime, consulte Extensión de metadatos mediante atributos.

Dado que puede mostrar componentes en un diseñador como Visual Studio .NET o Visual Studio, los componentes requieren atributos que proporcionen metadatos a las herramientas en tiempo de diseño.

Para mostrar el control y sus miembros correctamente en tiempo de diseño, los atributos en tiempo de diseño son esenciales porque proporcionan información valiosa a una herramienta de diseño visual. Por ejemplo, en el siguiente fragmento de código, el CategoryAttribute atributo permite que el explorador de propiedades muestre la TextAlignment propiedad en la Alignment categoría . El DescriptionAttribute atributo permite al explorador de propiedades proporcionar una breve descripción de la propiedad cuando un usuario hace clic en ella.

[
    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:

En Visual C# .NET, Visual Basic .NET o Visual Basic, puede hacer referencia a una clase de atributo denominada AttributeNameAttribute simplemente como AttributeName en la sintaxis de atributo.

Referencias

Para obtener más información, vea Información general sobre los atributos.