【翻译】MSDN文档对类DefaultValueAttribute的描述有些混淆
http://msdn.microsoft.com/zh-cn/library/system.componentmodel.defaultvalueattribute(v=vs.80).aspx
文档特别说明:
成员默认值通常是其初始值。
从这,你可能推断出如果你设置属性的DefaultValue attribute,属性被初始化为设置的值。
然而,你应该设置属性的DefaultValue attribute等于其初始值。
在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]
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分类下显示属性TextAlignment。DescriptionAttribute attribute能够使属性浏览器在用户点击该属性时提供简要说明。
[Visual C#]
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
qishichang