无法实现具有约束的多通用参数方法?

Ibr*_*taz 3 c# generics interface constraints

我有以下接口声明:

public interface IBasePresenter
{
    void Run();
    void ShowDialog<T, M>(T t, M m ) where T : UserControl where M : Form,      ISomeInterface<SomeType>;
}
Run Code Online (Sandbox Code Playgroud)

ShowDialog()基本上是一个向用户显示模式对话框的方法.其中'T'是父Form,M是要显示的唯一对话框.M有多种不同的类型!因此选择通用方法的原因!

我认为可以使用这种方法的几种方法:

Presenter.ShowDialog(this, typeof(Form1)); // FigA
Run Code Online (Sandbox Code Playgroud)

要么

Presenter.ShowDialog(this, new Form1()); // FigB
Run Code Online (Sandbox Code Playgroud)

基于图A或B,示例ShowDialog()方法实现到底是什么样的?

我的问题源于试图计算如何在ShowDialog()方法实现中实例化泛型参数"M".

Mar*_*ell 5

猜测:

m.Controls.Add(t);
m.ShowDialog();
Run Code Online (Sandbox Code Playgroud)

但是,坦率地说,我不确定这个实用方法是否会增加很多用处,而且它也可能是非泛型的(void ShowDialog(Control t, Form m)).如果使用: new()约束,它可能会更有用,这也可以避免在多个表单上使用相同控件实例的风险(非法).但正如我所说的那样:坦率地说,我不会理会这种方法,直到它证明了一些非平凡的用处.如果我确实保留了它,我会将参数重命名为更有启发性; 没有M,m,T,t告诉我他们的意思.

  • +1我同意关于泛型在这里没有多大意义的观点. (3认同)