我有一个在customcontrol中实现的接口:
public interface IArrow{...}
pulblic class Arrow1:UserControl, IArrow{....}
pulblic class Arrow2:UserControl, IArrow{....}
然后我的表格会显示箭头:
Arrow1 arr1=new Arrow1();
Arrow2 arr2=new Arrow1();
this.Controls.Add(arr1);
this.Controls.Add(arr2);
但我希望能够做到这一点:
IArrow arr1=new Arrow1();
IArrow arr2=new Arrow1();
this.Controls.Add(arr1);
问题是我需要强制转换为控件:
this.Controls.Add((Arrow1)arr1);
所以我的问题是我的界面必须实现什么接口才能添加到控件中? 所以我的IArrow会是:
public interface IArrow:InterfaceToAddToControls {...}
(这是一个摘要,而不是你能想象的完整代码)
答案 0 :(得分:2)
Control.ControlCollection.Add()方法的参数必须是Control类型。那不是接口类型。您的控件已经从Control派生,不需要强制转换。你只需要一个单独的局部变量,无法解决这个问题:
var ctl = new Arrow1();
this.Controls.Add(ctl);
IArrow arr1 = ctl;
或者是一个小帮手方法:
private IArrow AddArrow(Control ctl) {
this.Controls.Add(ctl);
return ctl as IArrow;
}
...
IArrow arr1 = AddArrow(new Arrow1());