[英]C# WinForm with different Types?
我有一个封装所有功能的表单,但是可以与具体的Type T1一起使用 。 现在,我要创建具有不同之处的相同表单,它将使用另一个Type T2 。
T1和T2不继承任何东西 ,所以我不能使用继承。
我如何才能做到一次又一次不复制整个代码?
我当时正在考虑创建通用表单,但是我认为这不是正确的解决方案。
有任何想法吗?
编写T2,复制所有代码,并确保将所有差异封装在单独的方法中。 然后创建一个新的基类,并从两者中移出通用代码。 在拥有两个需要共享代码的类之后,而不是事先进行计划,代码共享设计就变得更加明显(包括是否应使用泛型)。
您如何处理表格中的T1和T2? 如果要以强类型显示/接受值,则泛型听起来似乎是正确的方法-尽管使用WinForms设计器IIRC可能会比较棘手。
换句话说,如果您不使用WinForms,可以使用泛型吗?
我使用一个通用元素来封装我的对象,它具有一个文本值和一个标记值,它允许您尝试执行的操作,一种很好的用途是添加到组合框。 也许您可以将这样的内容合并到您的表单中?
public class GenericElement<T> {
public GenericElement(string text) {
this.Text = text;
}
public GenericElement(string text, T tag) : this(text) {
this.Tag = tag;
}
public T Tag {
get; set;
}
public string Text {
get; set;
}
public override string ToString() {
return Text;
}
}
// Combo-Box example
public class MyForm : Form {
private void DoLoad(object sender, EventArgs e) {
comboNum.Items.Add(new GenericElement<int>("One", 1);
comboNum.Items.Add(new GenericElement<int>("Two", 2);
comboNum.Items.Add(new GenericElement<int>("Three", 3);
}
public int SelectedNumber {
get {
GenericElement<int> el =
comboNum.SelectedItem as GenericElement<int>;
return el == null ? 0 : el.Tag;
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.