繁体中文
高级搜索
 
首页 | Web | Java | VC/MFC | VB | Delphi | C/C++ | C++ Builder | 其他开发语言 | .NET技术 | 移动平台 | MSSQL | PowerBuilder | DB2 | Oracle | 其他数据库开发 | Linux/Unix社区 | 多媒体/设计 | 硬件/嵌入开发 | Windows专区 | 硬件使用 | 软件培训/认证/考试

当前位置:首页 >> Delphi >> 语言基础/算法/系统设计 >> 谁能详细说说 XXX.create()?
谁能详细说说 XXX.create()?
作者:   来源: 发表时间:2007-01-11  字号:  

比如:
type
tmyclass = class
procedure aaa;
end;
...

procedure TForm1.FormCreate(Sender: TObject);
var myclass:tmyclass;
begin
myclass.aaa; //这里并没有 myclass:=tmyclass.create(),但也可以用?
//不过会提示 myclass 没有初始化?
end;


但是:

implementation
myclass:tmyclass

如果定义一个全局的 myclass:tmyclass 就不会出现提示 myclass 没有初始化?


创建实例是什么意思(原理)?
到底何时要创建实例(XXX.create)?
为什么在局部定义的 myclass:tmyclass 会出现未初始化,而全局的就不会?

请大家详细说说,或提供相关资料,谢谢!





FigoZhu(谢慕安) 于 2005-3-1 14:16:48

rrhrrhf(过路的) 于 2005-3-1 19:40:18
累?
rrhrrhf(过路的) 于 2005-3-2 21:00:20
二楼是想说创建类的实例吧

这我知道啊

可为什么要创建实例,什么时候创建实例,创建实例除了初始化还有些什么?
cybercake(数字蛋糕) 于 2005-3-2 22:21:37
理论上说,在不创建实例的情况下使用类成员都会出错。就算调用方法暂时行得通,往后处理数据的时候是一定不行的。所以没有必要讨论这种要不要创建实例的问题。

定义变量的时候(myclass:tmyclass)产生的只是一个指针(什么是指针不用我解释了吧)。你可以把某一个实例赋给它(引用),也可以调用TMyClass.Create创建一个实例。

singun(singun) 于 2005-3-2 22:32:57
类只是一个模子,如何要使用它所描述的功能,必须将其实例化。但是在没有创建其实例时,类本身也可以包含一些方法供调用,这就是类方法,此方法须带clase 关健字。
类实例化的原理是这样:
定义一类,实际上只是定义了一个指针,这个指针变量存储在系统堆栈区。在没有实例化前,它所指向的数据成员、方法(类方法除外),实际上并不存在.在实例化后,会在堆内开辟相应的内存存储类的数据成员、方法。实例化的方法并不一定就是create,可以自己定义.
rrhrrhf(过路的) 于 2005-3-3 8:32:52
多谢楼上两位的解说

那为什么在局部定义的 myclass:tmyclass 会出现未初始化,而全局的就不会?

这是为什么?
caiso(十年磨一剑) 于 2005-3-4 10:38:13
顶一下
chijingde(AD) 于 2005-3-4 10:43:52
那是编译器的警告

变量也是如此

var
a:integer;

var
i:integer;
begin
a:=i;
end;

会提示i没有被初始化
a不会提示是因为全局变量自动初始化,数字为0,指针为空
但是局部变量则不会
aus(天兵) 于 2005-3-4 18:18:28

rrhrrhf(过路的) 于 2005-3-4 19:15:43
正如楼上的楼上所说,我懂了,多谢!!!

楼上的楼上,你能再讲讲关于创建实例更多的东西吗

!注意:如果您发现此文章出现影响您的阅读的状况,请从浏览器地址栏里复制本文的链接到留言本报告给站长解决!
  • 上一篇: 抽奖程序代码高分相求!!进来看看
  • 下一篇: 我一个简单的数据库连接函数,以Index.asp命名,可以正常连接,但我以conn.asp命名的时候,以#include 过来

  • >> 联系我们请给我们留言·留言本
    本站所有提供的信息软件资料均来自网络,版权及著作权归原作者所有,如果无意中侵犯了您的相关权利或触及法律法规,请给我们留言, 我们将在24小时内删除。
      浙ICP备06029577号  程序员贴吧