在表单中拖了一个TBUTTON控件,
type
  TForm1 = class(TForm)
         button1: TButton;
      private
    { Private declarations }
  public
    { Public declarations }
运行Delphi程序时, 
Application.CreateForm(TForm1, Form1);通过这一行就创建了这个Form,
同时,按钮 button1也自动创建好了,可是代码并没有调用TButton的构造函数呀,那这个按钮就自动创建好了呢?

解决方案 »

  1.   

    类成员不会自动创建,拖上去的Button是Delphi窗体设计器创建的
    Delphi的组件支持序列化也叫流化,窗体设计器设计好界面后,生成一个.dfm文件
    dfm就是一种资源文件的格式
    通过编译器指令{$ *.dfm} 载入 由编译器完成创建 (这个过程就是反序列化)自己定义的类,如果成员是一个对象,是不会自动创建对象的
      

  2.   

    编译器指令是{$R *.dfm} 上面的少写了个R -.-!!意思就是载入和单元同名的dfm文件
      

  3.   

    Delphi将pas和res(dfm)文件分开,而.net和java则直接用代码来创建和设置组件属性,两者各有利弊。说到delphi的序列化机制,窗体创建时会调用InitInheritedComponent方法来完成组件的序列化,它会再委托给TStream.ReadComponent方法。你可以顺着研究下TReader和TWriter。