省市选择案例的问题

问题:

    杨老师视频教程中原先Form_Load事件中的代码如下:
                    using(SqlDataReader dataReader=cmd.ExecuteReader())
                    {
                        while (dataReader.Read())
                        {
                            PromaryItem item = new PromaryItem();
                            item.proID = dataReader.GetInt32(dataReader.GetOrdinal("proID"));
                            item.proName = dataReader.GetString(dataReader.GetOrdinal("proName"));
                            cb省.Items.Add(item);
                        }
                    }
               dataReader游标每次移到下一位都要实例化一个new PromaryItem(),我为了节省资源,
    就把 PromaryItem item = new PromaryItem()提到while循环外,代码如下:
                    using(SqlDataReader dataReader=cmd.ExecuteReader())
                    {
                        PromaryItem item = new PromaryItem();
                        while (dataReader.Read())
                        {
                            item.proID = dataReader.GetInt32(dataReader.GetOrdinal("proID"));
                            item.proName = dataReader.GetString(dataReader.GetOrdinal("proName"));
                            cb省.Items.Add(item);
                        }
                    }
    结果在cb省_SelectedIndexChanged事件中不管选择什么省,得出的城市都是“香港特别行政区”。
    PS:“香港特别行政区”在promary表中为最后一条记录,我就是不明白为什么会这样子?

  思路:

    new PromaryItem()这个唯一的对象分配在堆上;

    用C语言的指针来理解:就是所有省的城市都关联到了new PromaryItem()这个唯一的对象,并且这个对象的城市属性被覆盖为“香港特别行政区”

    所以结果就是在cb省_SelectedIndexChanged事件中不管选择什么省,得出的城市都是“香港特别行政区”。

    PS:要理解堆和栈才能理解这个问题

posted @ 2011-02-22 22:57  圣歌  阅读(136)  评论(0编辑  收藏  举报