问题
1.方法的调用可以是对象.方法或者是类.方法。如form1.create或tform1.create这两种调用方法有什么区别。
2.create方法有参数。如tform1.create(self),有和无参数又有什么区别。
3.self对象是什么?

解决方案 »

  1.   

    1.这是Object Pascle的语法,SomeObjectInstance := TSomeObject.Create;
    2.这个问题有上个问题有关,就是Create有时要带参数,这个参数(有时没有)是由这个Object的构造函数决定的。
    3.你在用self对象时,将鼠标放在它面,会看到它的类型的。
      

  2.   

    1.create是一个类方法,也就是由类本身调用而不依赖于类的实例,因为调用create以前form1这个实例还没有构造,而TForm1这个类已存在,所以不能用Form1.create而要用TForm1.create
    2.create是一个过程,带不同的参数就是对他的重载,传入不同的参数就调用不同的函数,TForm的create传入一个参数表示这个Form的owner,owner会负责它的销毁
    3.self就是这个类的当前实例的指针
      

  3.   

    补充:
    1. 如果用类引用来调用构造函数{TForm1.Create(Application)},Delphi会调用类的NewInstance方法来分配类的一个新的实例。而用对象引用来调用构造函数时{Form1.Create(Application)},它以调用任何普通方法的方式来调用构造函数,并不调用NewInstance方法来分配内存。
    2.从TComponent类开始,类的构造函数就时TComponent.Create(AOwner),这里AOwner指定的是你所创建的实例的属主对象,即把对象生命期管理交给属注对象,这样就不用手工销毁了。如果是TComponent.Create(Nil),则不指明属主对象,声明其由程序员管理。
    2.方法区别与普通函数和过程的地方就是它隐含一个Self指针,它引用作为方法调用主体的对象。但在类方法中,Self不引用对象,而是引用类!打的累死我了,呵呵^_^
      

  4.   

    星星球讲得不错,我补充一点:
    窗体互相调用时,避免引用窗体的名称,尽可能用self。
      

  5.   

    星星球讲得不错,我补充一点:
    窗体互相调用时,避免引用窗体的名称,尽可能用self。