• 省市选择案例的问题


    问题:

        杨老师视频教程中原先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:要理解堆和栈才能理解这个问题

  • 相关阅读:
    bootstrap-treeview 实现级联选择
    MockMvc
    TCP的三次握手与四次挥手的理解
    多线程之按序打印
    java后端学习流程
    nginx安装配置
    今天给大家分享个玩具——树莓派
    nginx启动报错
    springboot自定义注解
    初探企业级应用开发主流前沿技术
  • 原文地址:https://www.cnblogs.com/605395451/p/1961811.html
Copyright © 2020-2023  润新知