我正在创建一个 MDI 表单
,并且我有一个加载不同表单的方法。现在我需要做一点修改——我需要添加从另一个子窗体中调用一个子窗体的功能。
因为我在几个不同的地方需要这个,所以我创建了一个新类,所有需要这个功能的类都继承了这个类。我想让它与泛型一起工作,这样我就可以传递我可能需要的每个表单类,例如 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..."。我什至不确定这是不是这样做的方法。
GetInstance<>` 必须采用与我正在调用的表单类型相同类型的参数。
最佳答案
您需要使用类型参数,而不是变量名:
sender = SingletonFormProvider.GetInstance<T>(frm, true);
此外,为了确保 T
有效(如您的 comment 所建议的那样),您需要对其进行约束:
protected void LoadAForm<T>(ref T sender) where T : Form
关于C# - 使用泛型类型的方法的实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14642456/