zoukankan      html  css  js  c++  java
  • 省市选择案例的问题

    问题:

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

  • 相关阅读:
    ubuntu环境下编译linux内核问题解决备忘
    Ubuntu 16.04 安装 arm-linux-gcc 交叉编译工具
    opus代码解析
    google的android工具常用下载路径
    opus在arm的嵌入式平台上的移植和开发
    OGG的孩子-有损音频编码opus
    ogg的孩子-无损音频编解码flac
    音频科普---oggs
    当初我为什么要去创业公司呢?
    python实现桶排序算法
  • 原文地址:https://www.cnblogs.com/605395451/p/1961811.html
Copyright © 2011-2022 走看看