C#WinForm有不同的类型?

时间:2009-09-02 06:12:36

标签: c# winforms

我有一个封装所有功能的表单,但使用具体的 Type T1 。 现在我想创建具有差异的相同表单,它将使用另一个类型T2

T1和T2不会继承任何内容,因此我无法使用继承。

如果不一次又一次地复制整个代码,我怎么能这样做呢?

我正在考虑创建一个通用表单,但我认为这不是一个正确的解决方案。

有什么想法吗?

3 个答案:

答案 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;
        }
    }
}