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