所以这里是简单的代码:
[System.ComponentModel.DefaultValue(true)]
public bool AnyValue { get; set; }
我确定我不会再次将 AnyValue 设置为 false(我刚刚创建了它)。此属性是 ASP.NET 的 Page 类的属性。我正在检查按钮事件处理函数中的值。但不知何故,它仍然是错误的。我想知道它实际上何时设置为真?在编译时?什么时候实例化类?
你觉得我做错了什么?
所以这里是简单的代码:
[System.ComponentModel.DefaultValue(true)]
public bool AnyValue { get; set; }
我确定我不会再次将 AnyValue 设置为 false(我刚刚创建了它)。此属性是 ASP.NET 的 Page 类的属性。我正在检查按钮事件处理函数中的值。但不知何故,它仍然是错误的。我想知道它实际上何时设置为真?在编译时?什么时候实例化类?
你觉得我做错了什么?
DefaultValue 不设置值。
它的作用是告诉 VisualStudio 默认值是什么。当在表单上选择一个可视元素(按钮、列表框等)并显示“属性”面板时,VS 会将设置为 DefaultValue 中给出的值之外的属性值加粗。
因此,在您的情况下,由于 AnyValue 为 false,但其 DefaultValue 为 true,因此将在“属性”面板中以粗体显示false 。如果您要手动将其更改为“true”,则它将显示为非粗体。
那么按照我的意思设置默认值的最佳方法是什么?
这对我来说似乎是个好方法;
private bool myVal = true;
public bool MyVal
{
get { return myVal; }
set { myVal = value; }
}
如前所述,它不设置值。
除了PropertyGrid
,[DefaultValue]
还被各种序列化器实现使用,例如XmlSerializer
和DataContractSerializer
。对于信息,还有第二种模式:bool ShouldSerialize{Name}()
所有 3 都尊重。