在表单中声明C#类对象

时间:2012-08-14 19:00:24

标签: c# visual-studio forms collections

"view = new Person"置于按钮事件处理程序中是否可以?如果我不这样做,并将其放在Form1构造函数中,则只添加我的最后一个值。如果我想声明一个新实例然后将它添加到我的Arraylist中,这是正确的方法吗?

    private ArrayList store;

    public Form1()
    {
        InitializeComponent();
        store = new ArrayList();
    }

    private void Form1_Load(object sender, EventArgs e)
    { }

    private void button1_Click(object sender, EventArgs e)
    {
        //Is it okay to declare a new instance of the Person class 
        // with each button push?            
        Person view = new Person();
        view.firstname = txtFirstName.Text;
        view.lastname = txtLastName.Text;
        store.Add(view);
        txtFirstName.Clear();
        txtLastName.Clear();   
    }

    private void button2_Click(object sender, EventArgs e)
    {
        foreach (Person display in store)
        {
            MessageBox.Show(display.ToString());
        }
    }

2 个答案:

答案 0 :(得分:5)

  

可以在按钮事件处理程序中放置“view = new Person”吗?

是。如果您的目标是在每次单击按钮时创建一个新人,那么这是合适的。

旁注:您应该考虑使用List<Person>代替ArrayList。这是较新的,类型安全的列表类(从.NET 2.0开始),并且使用起来更好。

答案 1 :(得分:0)

这看起来像完全你应该做什么。

我想你在某个地方读过你应该避免做一些复杂的事情,比如在表单的事件处理程序中实例化对象。这听起来像是一个名为“模型 - 视图 - 控制器”的应用程序设计模式,为了实现它,你将有一个类,与你的WinForm分开,包含单击按钮时应该执行的逻辑,以及表单的而是将控件链接到此Controller的方法,而不是包含其自己的处理程序的表单。它有其优点,但对于普通的小项目来说,没有必要。继续做你正在做的事情,这很好。

有几点:首先,除非你在.NET 1.1中进行编码,否则ArrayList通常不是一件好事。从.NET 2.0开始,该语言引入了一个称为泛型的概念,泛型允许您执行的主要操作之一是指定集合可以包含的对象类型。 System.Collections.Generics.List<T>类是store的更好选择,如果它将存储的全部是人;将声明更改为private List<Person> store;。使用泛型集合的优点是需要返回对象的代码将知道对象是什么类型,因为集合将禁止向其添加不同类型的对象。

其次,在定义事件处理程序之前,在将它们放入设计器中时将其命名。代码应该是自我记录的,名为“button1”的按钮不会告诉我们它应该做什么。如果您在将其从工具箱拖到窗体上之后将此按钮命名为“CreatePersonButton”,则当您双击它以定义其行为时,事件处理程序将命名为“CreatePersonButton_Click”,这更具描述性。