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.
Comentarios
https://aka.ms/ContentUserFeedback.
Próximamente: A lo largo de 2024 iremos eliminando gradualmente GitHub Issues como mecanismo de comentarios sobre el contenido y lo sustituiremos por un nuevo sistema de comentarios. Para más información, vea:Enviar y ver comentarios de