const 引起的BUG
今天白天出现了碰见了一个问题,隐藏得比较深,这里记录一下。
初衷很简单,就是要更改改一个数据库的链接名,这个链接名是放在数据层public const string connDB="connDBValue",也就是DataAccess项目下面,然后我Servcie层项目也用到这个链接名使,string db=DataBaseFactory.GetDatabase(DbHelper.connDB);现在我把这个变量名的值给更改了,因为只更改了数据层 然后编译数据层dll,自测总是提示没有找对对应的链接名,然后直接编译解决方案,ok,没问题。然后因为我只动了数据层就只把数据层这个dll传到线上,然后运行,黄页,百思不得其解。然后突然想到const修饰的是静态常量也就是说在编译之后就确定下来了,也就是说线上的service dll用到的db变量还是我修改之前的那个值,那么我把本地编译之后的service dll也传到线上就行了,果然就OK了。
现在来分析下这里出现的问题。
问题就是出现在const修饰符上,const修饰的connDB为静态常量,代码中用到了这个变量的地方编译之后都会替换成表示的值 connDBValue
直接看代码,为了看区别添加了readonly 和不加修饰符做对比:
DataAccess层声明变量DBBlog
- namespace Simple.DataAccess
- {
- public class DbHepler
- {
- public const string constDB = "connDBValue";
- public static readonly string readonlyDB = "connDBValue";
- }
- }
service层调用DbHepler.DBBlog变量
- namespace Simple.Service
- {
- public class Example
- {
- public void GetInfo()
- {
- int constL = DbHepler.constDB.Length;
- int readonlyL = DbHepler.readonlyDB.Length;
- }
- }
- }
反编译看源代码
- namespace Simple.Service
- {
- public class Example
- {
- public void GetInfo()
- {
- int length = "connDBValue".Length;
- int length2 = DbHepler.readonlyDB.Length;
- }
- }
- }
这里可以看到const修饰的constDB变量编译之后已经被替换成了原来定义的值,而readonlyDB没有变化,readonlyDB会在代码执行到这里来的时候才会把值替换。
回到最上面的出现的问题,我修改了DataAccess层的变量值,但是并没有重新编译Service层 ,那么Servce层用到的值还是原始的值,所以就导致出了问题。
const 引起的BUG的更多相关文章
- BugTracker 加入发Mail的功能
BugTracker部署好之后,发现增加bug不能mail提醒.于是补上这个功能记录在此,方法是次要的,主要是找到地方.需要3步.吐槽下Asp的代码风格看的真心蛋疼.... 一.发送mail(主要是找 ...
- 推荐一个优秀的c++源代码,TinyXml2
项目主页:http://grinninglizard.com/tinyxml2docs/index.html tinyxml2.h /* Original code by Lee Thomason ( ...
- React require(“history”).createBrowserHistory` instead of `require(“history/createBrowserHistory”)
看见bug惊讶,代码中并没有require("history/createBrowserHistory") //原有代码为 import createBrowserHistory ...
- openssl 1.1.1 reference
openssl 1.1.1 include/openssl aes.h: # define HEADER_AES_H aes.h: # define AES_ENCRYPT 1 aes.h: # de ...
- 「caffe编译bug」 undefined reference to `boost::match_results<__gnu_cxx::__normal_iterator<char const*, std::__cxx11
CXX/LD -o .build_release/tools/test_net.binCXX/LD -o .build_release/tools/convert_annoset.binCXX/LD ...
- C++ | 使用const std::map,map::[]时遇到的一个bug
原函数简化后如下: void fun(const map<int,vector<int>> &mp, int index) { for (auto tmp : mp[i ...
- 应该是Angular2的一个bug?
为了应对未来的趋势,及时赶上下一趟互联网技术,我最近也在通过具体项目研究angular2,首先必须要吐槽的是,学习angular2的成本本身不高,但是一堆的工具.配置实在让人 很是焦灼,就像asp.n ...
- 那些年黑了你的微软BUG
本文为 Dennis Gao 原创技术文章,发表于博客园博客,未经作者本人允许禁止任何形式的转载. 前言 炎炎夏日,朗朗乾坤,30℃ 的北京,你还在 Coding 吗? 整个 7 月都在忙项目,还加了 ...
- iOS开发之Bug(持续更新)
前言:收集在开发和学习的过程中遇到的bug. 1.循环利用cell的ID设置位置写错了.导致程序奔溃. 2.对于除数算法,可以直接算出结果的就写上结果,不要偷懒写式子让计算机自己算,更何况是除数,会有 ...
随机推荐
- MapReduce和Spark写入Hbase多表总结
作者:Syn良子 出处:http://www.cnblogs.com/cssdongl 转载请注明出处 大家都知道用mapreduce或者spark写入已知的hbase中的表时,直接在mapreduc ...
- 使用STM32F4的CCM内存
使用STM32F4的CCM内存http://www.stmcu.org/module/forum/forum.php?mod=viewthread&tid=604814&fromuid ...
- 数据库---实验四 oracle的安全性和完整性控制
实验内容: (一) 授权 . 以dba用户的身份登陆oracle,创建用户u1+学号后四位,u2+学号后四位. SQL> create user u1_3985 identified by &q ...
- jdk源码分析红黑树——插入篇
红黑树是自平衡的排序树,自平衡的优点是减少遍历的节点,所以效率会高.如果是非平衡的二叉树,当顺序或逆序插入的时候,查找动作很可能会遍历n个节点 红黑树的规则很容易理解,但是维护这个规则难. 一.规则 ...
- sea.js模块化编程
* 为什么要模块化? 解决文件依赖 解决命名冲突 ; var var2 = 2; function fn1(){ } function fn2(){ } return { fn1: fn1, fn2: ...
- 前端之HTML知识点整理
一.html概述 htyper text markup language 即超文本标记语言 超文本: 就是指页面内可以包含图片.链接,甚至音乐.程序等非文字元素. 标记语言: 标记(标签)构成的语言 ...
- js sort() reverse()
数组中存在的两个方法:sort()和reverse() 直接用sort(),如下: ,,,,,,,,,,,]; console.log(array.sort());ps:[0, 1, 2, 2, 29 ...
- linux查看本机IP、gateway、DNS
IP: ifconfig gateway:[root@localhost ~]# netstat -rnKernel IP routing tableDestination Gatew ...
- QQ互联登录以及非官方正版应用报100044错误
QQ第三方登录的时候,显示非官方正版应用,报100044错误:坑1:我们在QQ互联注册成功后需要设置包名和签名,签名是通过官方提供的工具生成的.注意一点:这里的签名是需要由打包签名之后APK生成,我们 ...
- 网络安全——数据的加密与签名,RSA介绍
一. 密码概述 发送者对明文进行加密然后生成密文,接受者再对密文解密得到明文的过程. 现在使用的所有加密算法都是公开的!但是密钥肯定不是公开的. 1 散列(哈希)函数 通常有MD5.SHA1.SHA2 ...