嗨,我有一个泛型函数,如下所示。它可用于通过调用
showForm(ch);
它适用于第二个函数(没有参数的新函数),但是如果我想要像第三个函数(带参数的新函数)那样在构造函数中使用参数来显示表单,那么我就不能这样做了。你知道该怎么做吗?.Any?
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;
}
发布于 2010-07-29 04:45:01
使用Where T : new()
告诉编译器T
有一个public
no-arg构造函数。
第二种形式没有这样的构造函数。
从您所显示的内容来看,实际上并不需要在构造函数中设置标题( showForm
方法如何知道要设置什么?)。
因为T
也被约束为Form
,所以您可以在实例化frm.Text =
之后设置Form
。
发布于 2010-07-29 04:47:49
new()
保证T将有一个不带参数的公共构造函数-通常,如果您需要创建该类型的新实例,则可以使用此约束。您不能直接将任何内容传递给它。
看看这个
https://stackoverflow.com/questions/3359476
复制