HI, 我有一个通用函数,如下所示。它可用于通过调用
来显示表单 showForm(ch);
IT适用于第二个函数(没有参数的新函数),但是如果我想在构造函数中显示表单但是在第三个函数中使用参数(new with parameter),那么我就不能这样做。任何人都有一个想法怎么做?
void showForm<T>(T frm) where T :Form, new()
{
if (frm == null)
{
frm = new T();
}
frm.MdiParent = this;
frm.Show();
}
//Works for this
public frmChild2()
{
InitializeComponent();
ChildToolStrip = toolStrip1;
// toolStrip1.Visible = false;
}
//Does not Work for this
public frmChild2(string title)
{
InitializeComponent();
ChildToolStrip = toolStrip1;
Text = title;
// toolStrip1.Visible = false;
}
答案 0 :(得分:5)
使用Where T : new()
告诉编译器T
有一个public
无参数构造函数。
第二种形式没有这样的构造函数。
根据你所展示的内容,没有必要在构造函数中设置标题(showForm
方法如何知道要设置什么?)。
由于T
也被限制为Form
,因此您可以在实例化frm.Text =
后设置Form
。
答案 1 :(得分:1)
new()
保证T将具有不带参数的公共构造函数 - 如果您需要创建该类型的新实例,通常使用此约束。你不能直接传递任何东西。
检查