1

我正在创建一个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<>` 必须采用与我正在调用的表单类型相同类型的参数。

4

2 回答 2

5

您需要使用类型参数,而不是变量名:

sender = SingletonFormProvider.GetInstance<T>(frm, true);

此外,为确保它T有效(如您的评论所示),您需要对其进行约束:

protected void LoadAForm<T>(ref T sender) where T : Form
于 2013-02-01T08:43:27.053 回答
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();
    }
}
于 2013-02-01T08:47:46.037 回答