叫我疯了,但我是那种喜欢带参数的构造函数(如果需要)的人,而不是没有参数后再设置属性的构造函数。我的思考过程:如果需要属性来实际构造对象,则应将其放入构造函数中。我有两个优点:
我知道在构造对象时(没有错误/异常),我的对象很好。
它有助于避免忘记设置某些属性。
在表单/用户控件开发方面,这种心态开始伤害我。想象一下UserControl:
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要在构造函数中使用with参数的情况,我必须添加第二个不需要的构造函数?并实例化控件两次?
我觉得我一定做错了。有什么想法吗?意见?保证(希望)?
互换的青春
宝慕林4294392