C# - 使用泛型类型的方法的实现

标签 c# winforms generics

我正在创建一个 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/

相关文章:

c# - 在 ASP.NET MVC 4 应用程序中打印版本号

c# - c#图片移动问题

java - 通用方法类型参数确定

c# - 将 Char[] 转换为 List<byte> (c#)

c#屏幕共享效率

c# - 使用 System.Net.Mail 唯一标识发送的电子邮件

c# - C# 中继承的奇怪行为

c# - 检测从 C# 应用程序最小化的所有窗口

c# - 在线程中打开新的子表单

java - 可以迭代的固定数量的通用对象