在Delphi中的每个pas单元文件中的initialization
块的所起的作用,在C#中有类似的机制么?

解决方案 »

  1.   

    可以参考周爱民的《Delphi 源代码分析》,里面对单元初始化有比较详细的介绍
      

  2.   

    手边没有《Delphi 源代码分析》,还请兄台描述一下
    C#中的类似实现initialization的方式,多谢!也请各位不吝赐教。
      

  3.   

    >>C#中的类似实现initialization的方式,多谢!
    C# 我不是特别熟悉,也好久没用了,
    但就我知道,应该是没有的才对,
    如果需要,你可以在最外层的那个对象,建立初始化的东西
      

  4.   

    不知道下面这个能让你理解了不?
    引:
    下面是一个典型的应用程序的Delphi工程文件,我们注意到一开始就有一个对Application对象的Initialize方法的引用,我们的分析也就从这里开始:program Project1;uses
      Forms,
      Unit1 in 'Unit1.pas' {Form1};{$R *.res}begin
      Application.Initialize;
      Application.CreateForm(TForm1, Form1);
      Application.Run;
    end.隐藏的窗口是由Application对象创建的,那么Application对象又从何而来呢?在Delphi的代码编辑窗口中按住Ctrl点击Application就会发现,Application对象是在Forms.pas单元中定义的几个全局对象之一。这还不够,我们想要知道的是Application对象是在什么地方创建的,因为必须成功创建了TApplication类的实例我们才能引用它。
    想一下,有什么代码会在Application.Initialize之前执行呢?对了,是initialization代码段中的代码。认真调试过VCL源码就可以知道,VCL中很多单元都有initialization代码段,启动Delphi程序时,先是按照uses的顺序执行每个单元中initialization代码段的代码,完成所有的初始化动作之后才执行Application的Initialize方法以初始化Application,所以很显然,Application对象是在某个单元的initialization代码段中创建的。
    以"TApplication.Create"为关键字在VCL源码目录中搜索一番,我们果然在Controls.pas单元中找到了创建Application对象的代码。在Controls.pas单元的initialization代码段,有一句对InitControls过程的调用,而InitControls的实现则如下所示:Unit Controls;

    initialization
        ...
        InitControls;procedure InitControls;
    begin
    ...
      Mouse := TMouse.Create;
      Screen := TScreen.Create(nil);
      Application := TApplication.Create(nil);
    ...
    end;好,到这里我们的分析就完成了第一步,因为要解决非正常窗口的问题,我们必须要在Application对象初始化之前做一件事,因此了解应用程序的初始化过程就非常重要了。