设计人员在.NET中避免(或控制)重度定制属性的初始化是什么?有时,将属性设置为初始状态而不在最初设置时对该设置执行操作非常重要。
在下面的虚构示例中,我希望实现将UpdateSetting作为属性的灵活性,但不是每次应用程序启动时将数据库设置为零的不便。我能想到的只是另一个打开旗帜的财产。
public class A : UserControl
{
public int UpdateSetting
{
// Write to database or some such thing
}
...
public void InitializeComponent()
{
A a = new A();
a.UpdateSetting = 0; // Causes database write
}
}
答案 0 :(得分:1)
[Default(0)]
public int UpdateSetting
{
get { /*...*/}
set {/* Write to database or some such thing... */ }
}
这将使它最初在设计器中显示为0(如果在更改后将其设置为0,则以粗体显示),而不是每次都在代码中设置任何内容。
答案 1 :(得分:1)
假设您控制组件(A类),将DesignerSerializationVisibilityAttribute应用于昂贵的属性,并使用隐藏选项说“不为此属性生成setter”:
public class A : UserControl
{
[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
public int UpdateSetting
{
// Write to database or some such thing
}
}
(编辑:重新阅读时我不确定你是想阻止设计师初始化,还是让它成为可选项,或者允许它通过设计师完成,但推迟初始化的实际执行。只是第一种情况。)