==delphi中的class的问题?

lz_0618 2003-11-25 01:12:42
TMyClass = class
public
procedure myprc();
end;

.....
peocedure TMyClass.myprc();
begin
ShowMessage('In MyPrc');
end;

.....

var
AMyClass:TMyClass;
begin
AMyClass.MyPrc();
end;

delphi 中的class能不经过初始化(Create)就使用吗??
最近看到一段源代码,和上面的代码差不多,居然不出错!!!
...全文
62 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
lz_0618 2003-11-28
  • 打赏
  • 举报
回复
看来是jhwh(弹剑长歌),asj(),fj218(fj218) 说的没有错!
没有想到ESRI这样一家大公司,编出的例子代码竟然会出现没有初始化就使用的,

所以有这一问!!!!
fj218 2003-11-27
  • 打赏
  • 举报
回复
这个问题的论述很多了。的确不会出错,这很正常,不管有没有Class,只要你的方法没有用到数据成员,就可以不用Create进行调用。因为方法是静态编译的,同时又没有用到数据成员,所以不会出错。
asj 2003-11-27
  • 打赏
  • 举报
回复
虽然和那个问题不太相同,但基本上是类似的。都是实现中某种情况下的巧合。语言中没有这种定义,也绝对不要去利用这种巧合。
jhwh 2003-11-27
  • 打赏
  • 举报
回复
由于现在的编译技术还没有达到能够识别一个类中的哪个函数申明后而没有使用,因此在你的代码中调用了此类,所有的函数都在内存中了。各个类的实例调用的函数入口都是相同的,只是成员变量的值可能不同。没有初始化,如果你只是调用函数,而函数不与成员变量打交道,那么函数调用是没有关系的。
Linux2001 2003-11-27
  • 打赏
  • 举报
回复
TMyClass = class
public
class procedure myprc(); //改成这样的声明形式就可以不Create就使用
end;
overtime 2003-11-27
  • 打赏
  • 举报
回复
procedure myprc(); 不错?除非你加了这个过程前面加了关键字class???
lz_0618 2003-11-27
  • 打赏
  • 举报
回复
to asj() :
好象我的问题和哪个问题不太一样!
zhangnan623 2003-11-27
  • 打赏
  • 举报
回复
不Create绝对不行,除非系统自动初始了
比如:Tform1=class (Tform)
asj 2003-11-25
  • 打赏
  • 举报
回复
http://expert.csdn.net/Expert/TopicView1.asp?id=2431137
lz_0618 2003-11-25
  • 打赏
  • 举报
回复
to STYun(天云) :
确实不会出错的,我上面写的代码在Delphi7下试过的,没有什么问题的!!!

我问这个问题的意思是,这么做会不会出什么潜在的问题???或许如果用到TMyClass的成员变量就会有问题???
STYun 2003-11-25
  • 打赏
  • 举报
回复
我的感觉是不能,你如果单步调试一下的话会发现,在没有Create的情况下AMyClass指向nil,不可能不出错的

5,386

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧