一般用户调用总是:   对象.Create;内部定义构造方法时才用:   类名.Create
道理说不清,要仔细品味,反正不同;

解决方案 »

  1.   

    delphi中Create和不能用类实例来调用,因为这时候类实例还没有创建,调用会错误,
    而2TMyData已经 静态的存在于内存中,只能用MyData := TMyData.Create;
      

  2.   

    是啊,不好说。
    不过我只知道如果不用类的Create而直接用变量.create,进行应用的话,就出错误。
      

  3.   

    Kxy说的我能理解,但是类实例的Create方法到底有什么用?
    就是说MyDate.Create有什么用处?怎么用?
    谁能说明白马上就给分(前边两位回答我另外一个问题的分已经给了),呵呵!
    大家踊跃回答
      

  4.   

    你可以在delphi的help中查 Constructors
    When a constructor is called using an object reference (rather than a class reference), it does not create an object or return a value. Instead, the constructor operates on the specified object, executing only the statements in the constructor抯 implementation
    就是说,如果调用MyData.Create,他不创建任何Object也没有返回值,只是执行Create函数中的
    代码,就相当于Create是一个普通的函数一样。所以,如果没有创建类的实例,直接调用Create会出错,如果用TMydata.create,会创建一个实例,分配内存等等。
      

  5.   

    如果没有返回值,那么我在用MyDate := TMyDate.Create;之后用
     var MySecDate: TMyDate;
    MySecDate := MyDate.Create也能给MySecDate初始化,而且MySecDate和MyDate指向同一个内存区域,就MySecDate := MyDate的效果一样,这是怎么回事呢?
      

  6.   

    看CPU代码:
    MyData := TMyData.Create;
    mov dl,$01
    mov eax, [$00449f60]
    call TObject.Create;
    mov ebx,eax ;//这是返回值,
    SceData := MyData.Create;
    or edx,-$01
    mov eax,ebx //注意这里,eax又给赋值成ebx,ebx没有变化是TMyData.Create的返回值
    call TObject.Create;
    //没有返回值
    我觉得这是一个巧合,如果在两个语句之间改变了ebx,就会出问题
      

  7.   

    TMyDate.Create会分配内存,然后调用构造函数。
    MyDate.Create,不会分配内存,直接调用构造函数。也就是说构造函数里面的内容又被执行了一次,因而可能会引起错误。同时,MyDate.Create返回的还是MyDate,除非在Create中改变Self变量的值,这是一个高级技术,要小心利用。