我试图将c#generics绑定到类和这样的接口:
public class WizardPage<T> where T : UserControl, IWizardControl
{
private T page;
public WizardPage( T page ) {
this.page = page;
}
}
并使用它:
public class MyControl : UserControl, IWizardControl {
//...
}
不知何故,C#似乎无法确定MyControl是否是T的正确实例
public class Wizard<T> where T : UserControl, IWizardControl {
private WizardPage<T> Page1;
public Wizard( MyControl control ) {
this.Page1 = new WizardPage(control);
}
}
失败并显示错误
'Controls.WizardPage&lt; T&gt; .WizardPage(T)'的最佳重载方法匹配 有一些无效的论点
我做错了什么或者这不起作用?
答案 0 :(得分:2)
您的Wizard
课程应该看起来像这样:
public class Wizard<T> where T : UserControl, IWizardControl
{
private WizardPage<T> Page1;
public Wizard(T control)
{
this.Page1 = new WizardPage<T>(control);
}
}
或者,如果你不需要类本身是通用的,你可以做这样的事情:
public class Wizard
{
private WizardPage<MyControl> Page1;
public Wizard(MyControl control)
{
this.Page1 = new WizardPage<MyControl>(control);
}
}
答案 1 :(得分:0)
我没有获得Wizard
课程。不应该是这样的事情:
public class MyWizard : WizardPage<MyControl>{
public MyWizard( MyControl control ) : base(control) { }
}
答案 2 :(得分:0)
你必须申报使用的类型:
this.Page1 = new WizardPage<MyControl>(control);