[英]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.