我自己想写一个类,但是我有一点不太清楚的地方就是,什么时候我该用new来使用这个类,也就是说,DELPHI中的类有没有JAVA或是C中的STATIC申明。如我写了一个类叫TMyClass,那么我的类实例应该是这样的
var
myclass: TMyClass
begin
myclass := new {我也不清楚这个new是不是该写} tmyclass.create(); //要写这一步吗?
myclass.do();
...
end我有一点不明白的地方就是,是不是我一定要通过new或者.create()方法后才能使用该类的方法或是变量呢?
var
myclass: TMyClass
begin
myclass := new {我也不清楚这个new是不是该写} tmyclass.create(); //要写这一步吗?
myclass.do();
...
end我有一点不明白的地方就是,是不是我一定要通过new或者.create()方法后才能使用该类的方法或是变量呢?
解决方案 »
- 在打开某个文件(file->open project)老是提示出错 注册表(Path)配置错误,哪位高手指点下,谢谢
- 在调试时, 怎样动态设置下一条将要执行的语句?
- 关于如何在Dbgrid中显示备注型字段的问题?
- 关于Tclientsocket的错误?简单问题,欢迎近来讨论!
- access数据库的插入,更新操作
- 如何用代码切换数字键、大写锁定键及ScrollLock键?
- toolbar 中的按钮问题.
- 想做挖雷游戏,给点提示。
- 高分请求一段局域网登录代码,(自动填写用户名和密码)
- 各位大哥:不要再问哪里可下李维的书好不好,尊重一下作者吧!
- 服务器名称是什么意思?
- 调用一个vc写的dll时遇到奇怪的问题!!
var
myclass: TmyClass
begin
myclass := TmyClass.Create;
myclass.do;
...
myclass.Free; //对象用完后要释放
end;
加stdcall关键字试试看。
myclass := TmyClass.Create;
编译过程中有警告,但是程序运行没有错误,我的do()方法是public中申明的。
如果我加上了myclass := TmyClass.Create;,并且在用完后通过.free或.destory来释放,编译没有警告,程序运行也没有什么问题,所以这就是我不明白的地方,我没有加上stdcall,也没有初始化类实例,但类仍然可以使用,到底在什么时候应该加上.create呢?
还有,什么时候需要new呢?以下是我的想法,请勿见笑
------------------------
如果是一个新的form,则需要.create(),如果是一个unit,则不需要。
var
pInt:PInteger;
begin
new(pInt);
pInt^:=1;
showmessage(inttostr(i));
dispose(pInt);
end;
而create可以看作除了创建内存以外,更对该类使用的值进行初始化。
你没有调create就使用该类,只不过是碰巧没有出错而已,如果该类中有一个其它的成员类,你不初始化而使用是一定会出错的。