快速业务通道

类的成员初始化顺序

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-04-11

 C#作为一种纯面向对象的话言,为它编写的整个代码里面到处都离不开对象。一个对象的完整的生命周期是从开始分配空间到初始化,到使用,最后是销毁,使用的资源被回收。要想真正写出面高质量的代码,我们就得对这期间每一个阶段是怎么样一个状态,framework都做了些什么,我们又能够做些什么都要有些了解才行。
    一般来说大部分程序员对于一个创建好了的对象怎么使用都是比较清楚的,所以本文也就不想就这一部分做太多的说明,重点就集中开对象的创建和销毁这两个阶段,这也是程序员最容易范错误的阶断。本文首先来讲一讲对象成员的初始化,至于对象的释放和销毁,我想放到另外一篇文章里去讲。虽然本文是以C#2005 为例的,但推而广之,对于其它的基于CLS规范的语言应该也是一样的。

首先我们来看看引用类型的成员初始化过程

   我们来看一个例子吧

class Program
 {
     static void Main(string[] args)
     {
         DriveB d = new DriveB();
     }
 }
 
 class BaseA
{
    static DisplayClass a = new DisplayClass("基类静态成员初始化");

    DisplayClass BaseA_c = new DisplayClass("基类实例变量BaseA_c初始化");

    public BaseA()
    {
        Console.WriteLine("基类构造方法被调用");
    }
}

class DriveB : BaseA
{
    static DisplayClass DriveB_b = new DisplayClass("继承类静态成员DriveB_b初始化");

    //static BaseA DriveB_a = new BaseA();

    DisplayClass DriveB_c = new DisplayClass("继承类实例变量DriveB_c初始化");

    public DriveB()
    {
        Console.WriteLine("继承类构造方法被调用");
    }
}
class DisplayClass
{
    public DisplayClass(string diplayString)
    {
        Console.WriteLine(diplayString);
        Console.WriteLine();
    }
}
 

程序动行的结果是:
继承类静态成员DriveB_b初始化
继承类实例变量DriveB_c初始化
基类静态成员初始化
基类实例变量BaseA_c初始化
基类构造方法被调用
继承类构造方法被调用

得出初始化顺序结论:

)继承类静态成员变量初始化
)继承类实例变量初始化
)基类静态静态成员变量初始化
)基类实例变量初始化
)基类构造方法调用
)继承类构造方法调用。

    好像结果和JAVA的有点不一样啊, 有点混乱的感觉,搞不懂M$为什么要让初始化按这样的顺序执行,像JAVA那样严格的从基类到派生类多好呀.上例的运行结果说明, 构造函数这么这个和我们通常思路执行的顺序还是有一定的差别.对于实例成员初始化,基本上就是以下步骤执行:
 类的对象初始化大体顺序上实例成员赋值到构造函数
 成员赋值初始化按照由子类到父类的顺序
 构造函数的初始化按照由父类到子类的顺序
从这里我们有一点需要注意的是,因为成员赋值初始化是从子类到父类的,所以在子类的成员赋值初始化的过程中,不要引用父类定义的成员,因为这个时候父类成员还没有开始初始化.需要说明一点的是C#在创建

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号