C# - 使用泛型类型的方法的实现
本文关键字:方法 实现 泛型类型 | 更新日期: 2023-09-27 17:56:52
我正在创建一个MDI form
,我有一个加载不同表单的方法。现在我需要做一些修改 - 我需要添加从另一个子窗体中调用一个子窗体的功能。
因为我在几个不同的地方需要这个,所以我创建了一个新类,所有需要此功能的类都从谁那里继承。我想让它与泛型类型一起使用,这样我就可以传递我可能需要的每个表单类,如LoadAForm(MyForm1)
或LoadAForm(MyForm2)
等等。我希望我很清楚我想要什么作为最终结果。
我试过这个:
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<>' 必须采用与我调用的表单类型相同类型的参数。
您需要使用类型参数,而不是变量名称:
sender = SingletonFormProvider.GetInstance<T>(frm, true);
此外,为了确保T
有效(如您的注释所示),您需要对其进行约束:
protected void LoadAForm<T>(ref T sender) where T : Form
我认为这里不需要泛型。我认为您可以通过简单地使用 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();
}
}