最新评论
361741352 2012-05-27 09:42
SQLServer2005技术内幕T-SQL查询的代码 能发给我一份吗?
361741352@qq.com
tandly 2010-06-03 20:24
注意 使用枚举时千万别按照默认赋值
拿 c# 中的 DayOfWeek 为例
public enum DayOfWeek
{
Sunday = 0,
Monday = 1,
Tuesday = 2,
Wednesday = 3,
Thursday = 4,
Friday = 5,
Saturday = 6,
}
在为创建枚举成员的时候即为其赋值 在系统开发和维护过程中 增加或者删除一个成员时使用新的枚举数值就不会引发问题了
千万别这样
public enum DayOfWeek
{
Sunday,
Monday,
Tuesday,
Wednesday,
Thursday,
Friday,
Saturday,
}
否则就遇到你这样的郁闷事儿
blackcat 2010-06-02 10:16
@刘鸿海
[quote]刘鸿海:
@blackcat
呵呵,是啊,这是产生该问题的第6个条件(如果……),所以要写出来,希望能对大家有所帮助,[/quote]
呵呵,很好,很好。
共享给比你晚知道的人。比我做的好。
zdd 2010-06-02 09:26
[quote]Arthas-Cui:
定义一个const的int值, 然后编译, 用dll方式引用。
由于编译到dll中的时候, 编译器会优化代码, 不会保存常量名, 而是直接保存值。
因此, 下一个人用的时候, 永远是那个值, 即使这面已经改过值了。
例如:
我写了一个FrameWork, 定义一个常量:
public const int MaxValue = 100;
然后编译成dll了。 然后你在写程序的时候, 使用了我的framework。
并且引用了MaxValue这个值。
有一天我发现, 其实我支持的最大值是1000.
于是我升级了framework, 变成了:
public const int MaxValue = 1000;
然后framework发过去。
由于程序集版本不升级, 你替换后直接使用了。
那么, 你程序中使用MaxValue的地方, 就依然保持100, 而不是1000.[/quote]
所以尽量使用readonly 而不是 const,除非你保证永远不变,比如圆周率之类的。readonly 的好处就是它是运行时常量,修改它时,不必重新编译目标程序。
hoodlum1980 2010-06-02 00:49
这个问题的解决办法就是定义枚举的时候显示定义它的值(不要用编译器自动分配的值)。当然,如果你的枚举有可以分组(或有序)等需求,定义值的时候需要保留一些“空隙”,以作为将来的插入空间。
blackcat 2010-06-01 17:46
这种问题。
在C中有类似的,诸如定义结构体,之后定义修改,如果使用传指针的方式,相关的库不更新,同样有问题。
C++中的类似。。。
其实是代码管理上的经验问题。
Arthas-Cui 2010-06-01 17:34
定义一个const的int值, 然后编译, 用dll方式引用。
由于编译到dll中的时候, 编译器会优化代码, 不会保存常量名, 而是直接保存值。
因此, 下一个人用的时候, 永远是那个值, 即使这面已经改过值了。
例如:
我写了一个FrameWork, 定义一个常量:
public const int MaxValue = 100;
然后编译成dll了。 然后你在写程序的时候, 使用了我的framework。
并且引用了MaxValue这个值。
有一天我发现, 其实我支持的最大值是1000.
于是我升级了framework, 变成了:
public const int MaxValue = 1000;
然后framework发过去。
由于程序集版本不升级, 你替换后直接使用了。
那么, 你程序中使用MaxValue的地方, 就依然保持100, 而不是1000.
刘鸿海 2010-06-01 17:27
@Tony Zhou
因为每次改Bug和变更相对的变化都较小,可能用户怕所有的都提交过去动作比较大吧,怕万一有误操作就惨了,还是有一定的风险的。
Tony Zhou 2010-06-01 14:56
[quote]刘鸿海:
@阿水
是啊,我们组内是全部重新编译的,所以才不能再现这个问题,但是最终客户是要求只提交更改过的东西。[/quote]
很危险啊,数据乱了就不好,反正我们每次bin目录都打包

