我有一个UserControl,里面有一些布尔属性。如果没有在.aspx页面中显式设置,我希望它们默认设置为true,或者至少强制它们在无法设置默认值时声明。我知道有一种方法可以做到这一点,因为许多控件都需要在您尝试运行时破坏应用程序并且未声明它们的属性。
我该怎么做?
示例:
<je:myControl runat="server" id="myControl" showBox="False">
如果showBox被排除在此声明之外,我希望系统中断或将默认值设置为“true”。
谢谢!
答案 0 :(得分:26)
我知道我迟到但我只是想提一下
[DefaultValue(false)]
不会将该属性设置为false。见:http://msdn.microsoft.com/en-us/library/system.componentmodel.defaultvalueattribute.aspx。它说:
“DefaultValueAttribute不会导致成员使用属性的值自动初始化。您必须在代码中设置初始值。”
此属性仅用于在Visual Studio Designer中指示您认为是默认值。如果使用您的控件的某个人更改了此值,则会显示粗体,表示此值为非默认值。
答案 1 :(得分:20)
使用默认值定义属性:
private bool _ShowBox = false;
public bool ShowBox
{
set { _ShowBox = value; }
}
或在控件的构造函数中,设置默认值:
public MyControl()
{
_ShowBox = false;
}
如果未分配则抛出异常:
private bool _ShowBox = false;
public bool ShowBox
{
set { _ShowBox = value; }
get { return _ShowBox; }
}
答案 2 :(得分:2)
在声明变量时,只需设置所需的默认值:
class myControl
{
private bool _showBox = true;
[PersistenceMode(PersistenceMode.Attribute), DefaultValue(false)]
public bool showBox
{
get { return _showBox; }
set { _showBox = value; }
}
}
可选您可以为设计器添加DefaultValueAttribute。
答案 3 :(得分:2)
ReSharper建议使用自动属性,并在构造函数中设置默认值,如下所示:
public class MyControl
{
public MyControl()
{
ShowBox = true;
}
public bool ShowBox { get; set; }
}