【翻译】MSDN文档对类DefaultValueAttribute的描述有些混淆

你可能在下面MSDN中找到DefaultValueAttribute类的说明

http://msdn.microsoft.com/zh-cn/library/system.componentmodel.defaultvalueattribute(v=vs.80).aspx

文档特别说明:

成员默认值通常是其初始值。

从这,你可能推断出如果你设置属性的DefaultValue attribute,属性被初始化为设置的值。

然而,你应该设置属性的DefaultValue attribute等于其初始值。

使用Attributes扩展元数据

Microsoft .NET Framework Developer's Guide的使用Attributes扩展元数据主题中说明:

公共语言运行库允许你添加类似关键字的描述性声明,调用attributes,注释编程元素例如类型、字段、方法和属性。Attributes被保存在Microsoft .NET Framework元数据文件中,可以用来描述你的代码到运行库或者影响运行时的程序行为。

如果属性的attribute等于它的初始值,你可以访问属性的元数据来确定默认值。那么如果需要,你可以使用默认值来重置相应的成员变量。你也可以编写代码生成器来使用DefaultValue attribute来确定代码是否生成成员变量。你必须确定代码是否应该为成员变量适当的设置到它的初值值。

然而,DefaultValue属性不能使用attribute的值来初始化初始值。例如,在下面的代码示例中,属性IsValueSet的默认值为True并且也被初始化到值True。如果没有初始化,m_isValueSet的初始值为False

[Visual Basic]

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

更多关于如何应用属性以提供元数据给公共运行库,使用Attributes扩展元数据

因为你可以在设计器显示组件例如Visual Studio .NET或者Visual Studio 2005,组件需要提供元数据给设计时工具的attributes

为了在设计时正确显示你的控件和它的成员,设计时attributes是基础因为它们为可视设计工具提供可用信息,CategeoryAttribute attribute能够使属性浏览器在Alignment分类下显示属性TextAlignmentDescriptionAttribute attribute能够使属性浏览器在用户点击该属性时提供简要说明。

[Visual C#]
[Category("Alignment"),

 Description("Specifies the alignment of text.")]

public ContentAlignment TextAlignment { //... }               

[Visual Basic]

 <Category("Alignment"), _
    Description(
"Specifies the alignment of text.")> _
   
Public Property TextAlignment As ContentAlignment
      
' ...
   End Property
              

注:在Microsoft Visual C# .NET, Microsoft Visual Basic .NET, 或者在 Microsoft Visual Basic 2005,你可以在attribute语法上把类AttributeNameAttribute简作AttributeName

原文地址:https://www.cnblogs.com/qishichang/p/2093713.html