我有一个封装所有功能的表单,但使用具体的 Type T1 。 现在我想创建具有差异的相同表单,它将使用另一个类型T2 。
T1和T2不会继承任何内容,因此我无法使用继承。
如果不一次又一次地复制整个代码,我怎么能这样做呢?
我正在考虑创建一个通用表单,但我认为这不是一个正确的解决方案。
有什么想法吗?
答案 0 :(得分:1)
写入T2,复制所有代码并确保将所有差异封装在不同的方法中。然后创建一个新的基类并从两者中移动公共代码。在有两个需要它的类之后,代码共享设计变得更加明显(包括是否应该使用泛型),而不是尝试提前计划。
答案 1 :(得分:0)
你在表格中对T1和T2做什么?如果你想以强类型的方式公开/接受值,那么泛型听起来就像是正确的方法 - 尽管WinForms设计师IIRC可能会很棘手。
换句话说:如果你没有使用WinForms,你会使用泛型吗?
答案 2 :(得分:0)
我使用通用元素来封装我的对象,它有一个文本值和一个标记值,它允许你想要做的事情,一个很好的用途是添加到一个组合框。也许你可以在你的表格中加入这样的东西?
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;
}
}
}