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

对象初始化的顺序

时间:2014-10-27 15:33:48      阅读:189      评论:0      收藏:0      [点我收藏+]

标签:io   sp   on   cti   bs   as   对象   方法   c#   

一个对象初始化时的顺序是:

在不考虑继承关系时,那么顺序如下:

static Field -->static ctor --> instance Field -->instance ctor

原因:因为static ctor可能会用到static Field,所以必须先字段

 

考虑继承关系时,则是

class Base{}

class Derived:Base{}

Derived static Field --> Derived static ctor --> Derived instance Field --> Base instance Field -->Base instance ctor --> Dervied instance ctor

试想有这么一个基类,它在构造函数中调用了一个虚方法。然后又有这么一个派生类,它重写了基类的那个虚方法,并且在这个虚方法中访问了它自己的一个实例成员字段。

这一切都是完全合法的(至少在C#的世界里是这样的),对吧?在实例化一个派生类对象的过程中,其基类的构造函数会被调用,接着那个虚方法也会被调用,再接着派生类的实例成员字段会被访问。

所以此时此刻,这个类的实例成员字段必须是已被准备好了的!因此,派生类的实例成员字段必须先于基类部分被构造。

 

总之就是为了防止virtual function可能调用派生类中的字段,所以必须要先实例化好了.

一个最容易忽略的初始化还有这么多名堂...

 

对象初始化的顺序

标签:io   sp   on   cti   bs   as   对象   方法   c#   

原文地址:http://www.cnblogs.com/zhangrCsharp/p/4054290.html

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