你可以说我疯了,但我是那种喜欢带参数的构造函数(如果需要的话)的人,而不喜欢没有参数后面跟着设置属性的构造函数。我的想法是: 如果实际构造对象需要这些属性,那么它们应该放到构造函数中。我有两个优势:
在表单/用户控制开发方面,这种思维方式开始伤害我:
public partial class MyUserControl : UserControl
{
public MyUserControl(int parm1, string parm2)
{
// We'll do something with the parms, I promise
InitializeComponent();
}
}
在设计时,如果我把这个 UserControl
放在一个表单上,我会得到一个 Exception
:
创建组件“ MyUserControl”失败..。
System.MissingMethodException-没有为此对象定义无参数构造函数。
在我看来,解决这个问题的唯一办法似乎就是增加缺省构造函数(除非有人知道怎么做)。
public partial class MyUserControl : UserControl
{
public MyUserControl()
{
InitializeComponent();
}
public MyUserControl(int parm1, string parm2)
{
// We'll do something with the parms, I promise
InitializeComponent();
}
}
不包含无参数构造函数的关键在于避免使用它。而且我甚至不能使用 DesignMode
属性来执行以下操作:
public partial class MyUserControl : UserControl
{
public MyUserControl()
{
if (this.DesignMode)
{
InitializeComponent();
return;
}
throw new Exception("Use constructor with parameters");
}
}
这也行不通:
if (LicenseManager.UsageMode == LicenseUsageMode.Designtime)
好吧,继续..。
我有我的无参数构造函数,我可以把它放在表单上,表单的 InitializeComponent
看起来像这样:
private void InitializeComponent()
{
this.myControl1 = new MyControl();
// blah, blah
}
相信我,因为我这样做了(是的,忽略了 Visual Studio 生成的注释) ,所以我试着胡乱地将参数传递给 InitializeComponent
,这样我就可以将它们传递给 MyControl
的构造函数。
这让我想到:
public MyForm()
{
InitializeComponent(); // Constructed once with no parameters
// Constructed a second time, what I really want
this.myControl1 = new MyControl(anInt, aString);
}
对于我使用带有参数的 UserControl
到构造函数,我必须添加一个不需要的第二个构造函数?然后实例化控件两次?
我觉得我一定是做错了什么。有什么想法? 意见? 保证(希望) ?