码迷,mamicode.com
首页 > 其他好文 > 详细

静态成员初始化与构造函数的先后顺序

时间:2015-08-16 21:07:48      阅读:190      评论:0      收藏:0      [点我收藏+]

标签:

最近公司有个项目的数据库需要从Oracle迁移到SQLServer中,为了方便我引入一个轻量级的ORM框架PetaPoco,并且根据相关业务进行了简单封装。之前公司的项目架构极其简陋,功能很难扩展,很少用什么框架,代码中用了很多静态方法,可能觉得直接用类名点出方法很方便的缘故,而不去考虑服务器的负担,代码分层混乱,让我不敢相信这是一家上市公司的实力。也有可能只是.NET这块比较薄弱吧。作为应届毕业生,毕竟来这里还不到一个月。

言归正传,因为项目中都是静态方法,而我加入封装好的代码时,产生了一个疑惑,我让操作数据库的类都继承一个父类,为了能够公用DBContext,然而我的DBContext的对象并非静态,所以静态方法中访问不了,我只能改为静态成员,然而DBContext声明时我没有为其初始化,而是放在了父类的构造函数中,构造函数也是非静态的。当时修改时,并没有想太多,今晚突然想起来这样写可能有“Object reference is not set to an instance of an object”的错误,因为感觉上静态资源要先于构造函数,这里真的只是感觉,没有认真研究过。然后在园子里找到了一片文章,解答了我的疑惑。文章的总结语:编译器在编译的时候,会事先分析所需要的静态字段,如果这些静态字段所在的类有静态的构造函数,则忽略字段的初始化,否则先进行静态字段的初始化。对类的静态成员初始化的顺序取决于在Main函数中的引用顺序,先引用到的先进行初始化,但如果类的静态成员的初始化依赖于其它类的静态成员,则会先初始化被依赖类的静态成员。而带有静态构造函数的类的静态字段,只有在引用到的时候才进行初始化。

原文地址:http://www.cnblogs.com/cpcpc/archive/2010/04/16/2123135.html

静态成员初始化与构造函数的先后顺序

标签:

原文地址:http://www.cnblogs.com/hizhangbo/p/4734954.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!