我正在创建一个MDI form
,我有一个加载不同表单的方法。现在我需要做一些修改 - 我需要添加从另一个子窗体中调用一个子窗体的功能。
因为我需要在几个不同的地方使用它,所以我创建了一个新类,其中所有需要此功能的类都继承。我想让它适用于泛型类型,所以我可以传递我可能需要的每个表单类,如LoadAForm(MyForm1)
或LoadAForm(MyForm2)
等等。我希望我很清楚我想要的最终结果。< / p>
我试过了:
protected void LoadAForm<T>(ref T sender)
{
MainForm frm = this.MdiParent as MainForm;
T temp;
if (frm != null)
{
sender = SingletonFormProvider.GetInstance<temp>(frm, true);
sender.MdiParent = frm;
sender.Dock = DockStyle.Fill;
sender.Show();
}
}
哪个不起作用。但是当我在方法中使用泛型时,我几乎没有经验,所以我不知道如何继续。
使用此语法我得到的错误是The type or namespace "temp" could not be found...". I'm not even sure that this is the way to do it.
GetInstance&lt;&gt;`必须采用与我正在调用的表单类型相同类型的参数。
答案 0 :(得分:5)
您需要使用类型参数,而不是变量名称:
sender = SingletonFormProvider.GetInstance<T>(frm, true);
另外,为了确保T
有效(正如您的comment建议的那样),您需要限制它:
protected void LoadAForm<T>(ref T sender) where T : Form
答案 1 :(得分:1)
我认为你不需要仿制药。我认为只需使用Form
作为具体类型即可轻松完成工作:
protected void LoadAForm(ref Form sender)
{
MainForm frm = this.MdiParent as MainForm;
Form temp;
if (frm != null)
{
sender = SingletonFormProvider.GetInstance(frm, true);
sender.MdiParent = frm;
sender.Dock = DockStyle.Fill;
sender.Show();
}
}