• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

论全世界所有程序员都会犯的错误(C#)希望大家不会犯。

原作者: [db:作者] 来自: [db:来源] 收藏 邀请
前两天在PConline上看到一篇“论全世界所有程序员都会犯的错误”(网上有很多,好像是转贴的),
http://www.pconline.com.cn/pcedu/empolder/gj/java/0509/695483.html
说的是JAVA中使用静态对象出错的问题,没仔细看,只觉得他的那个实例在C#上好像
不会有这样的错误。想不到,今天,花了我好几个小时找的BUG,原来竟然是同样的错误
我的实例,我用一个类来存储图片实例(Bitmap),然后用一个列表(ArrayList)来保存多个
这样的类的实例,但是我发现每次重画的时候,被来取得不相同的图片,画的都是同一个图片,
而且是最后加入的那个类存储的图片,百思不得其解,最后发现我竟然把Bitmap声明成一个
静态的变量了. Private static Bitmap surface;阿!太粗心了.
用IL反编译,在结构化处定义
 IL_0001:  stsfld     class [System.Drawing]System.Drawing.Bitmap SKEP.MS.ControlLib.DeviceIcon::surface;
因此你把类加入队列的时候,静态的变量确是放在其他的内存区的(不知道这样理解对不对),
最终得结果是后来的Bitmap不断的覆盖,你取得Bitmap永远是最后加入的,欢迎大家来讨论,谢谢!
今天仔细看这篇文章,发现在文章最后有这么一段字
 其实Java的syntactic sugar并不算多,C#的syntactic sugar才真的是无所不在,也因此C#的初学者更容易犯了“全世界所有程序员都会犯的错误”。
附博客中静态对象的文章
http://lixianhuei.cnblogs.com/archive/2005/08/31/227274.html

 

鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
c#中实现c/c++的__Line__和__FILE__功能发布时间:2022-07-10
下一篇:
c#intInt32Int64的区别发布时间:2022-07-10
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap