一般用户调用总是: 对象.Create;内部定义构造方法时才用: 类名.Create
道理说不清,要仔细品味,反正不同;
道理说不清,要仔细品味,反正不同;
解决方案 »
- CreateProcess 失败!%1 不是有效的 Win32 应用程序。莫名其妙啊
- dbgrideh的多表更新问题
- 源码如何杀毒?
- 请问程序非正常退出的时候会接受到什么消息?另外是谁接受的?
- 想建个论坛,看看各位有没有想当版主的!!
- data control制件连接的是access数据库,在dbgrid中显示时为什么只显示第一列?不让弹出输入用户名和密码如何做?
- 怎样调用DLL文件啊
- listview中隐藏某一列的问题
- SQL查询的问题?
- delphi环境下怎样实现录音并保存成mp3格式,谁有着方面的源码愿意奉送?
- 关于数据库数据的输入输出
- 探讨一下吧!delphi中flash文件的播放??
而2TMyData已经 静态的存在于内存中,只能用MyData := TMyData.Create;
不过我只知道如果不用类的Create而直接用变量.create,进行应用的话,就出错误。
就是说MyDate.Create有什么用处?怎么用?
谁能说明白马上就给分(前边两位回答我另外一个问题的分已经给了),呵呵!
大家踊跃回答
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,会创建一个实例,分配内存等等。
var MySecDate: TMyDate;
MySecDate := MyDate.Create也能给MySecDate初始化,而且MySecDate和MyDate指向同一个内存区域,就MySecDate := MyDate的效果一样,这是怎么回事呢?
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,就会出问题
MyDate.Create,不会分配内存,直接调用构造函数。也就是说构造函数里面的内容又被执行了一次,因而可能会引起错误。同时,MyDate.Create返回的还是MyDate,除非在Create中改变Self变量的值,这是一个高级技术,要小心利用。