C# 如何实现通用OpenForm方法以允许任何类型的表单

C# 如何实现通用OpenForm方法以允许任何类型的表单,c#,generics,C#,Generics,我在FormMain:Form 如何实现OpenForm方法以允许我打开任何类型的表单 // the method in question void OpenFrom<T>() { // How to implement this generic method to get rid of OpenForm1() and OpenForm2() ??? } // Open Form1 instance void Open

我在
FormMain:Form
如何实现
OpenForm
方法以允许我打开任何类型的
表单

    // the method in question
    void OpenFrom<T>()
    {
        // How to implement this generic method to get rid of OpenForm1() and OpenForm2() ???
    }

    // Open Form1 instance
    void OpenForm1()
    {
        new Form1().Show();
    }

    // Open Form2 instance
    void OpenForm2()
    {
        new Form2().Show();
    }

    OpenForm<Form1>(); // instead of OpenForm1()
    OpenForm<Form2>(); // instead of OpenForm2()
//正在讨论的方法
void OpenFrom()
{
//如何实现这个通用方法来摆脱OpenForm1()和OpenForm2()???
}
//打开Form1实例
void OpenForm1()
{
新表单1().Show();
}
//打开Form2实例
void OpenForm2()
{
新表单2().Show();
}
OpenForm();//而不是OpenForm1()
OpenForm();//而不是OpenForm2()
以下是您的做法

 void OpenFrom<T>() where T : Form, new()
 {
     new T().Show();
 }
void OpenFrom(),其中T:Form,new()
{
新的T().Show();
}

这些是windows窗体吗?如果他们是,你将创建该表单的新实例,而不是使用先前存在的实例,对吗?@hunter,这似乎是OP的意图code@hunter我相信这就是问题所在。虽然这个答案从技术上回答了这个问题,我觉得在这个例子中使用泛型只是解决问题的糟糕方法的一个丑陋的补丁。@Jalil如果我理解正确,那么您需要这个
GetMdiChildForm(typeof(T))
。顺便说一句,这个方法对我来说很奇怪,我猜不出它对
Type
参数做了什么?对我来说,这看起来是错误的方法和泛型的滥用-我宁愿有一个签名为
OpenForm(Form Form)
的方法,并在
OpenForm
方法之外实例化
Form
(或至少在工厂通过)。