定义的类如下:type
TMydata = class
private
protected
public Function Getdata (const Filename : String):Tstringlist; end;implementation
Function TMydata.Getdata(const Filename : String):Tstringlist;
begin
Result:=Tstringlist.Create;
Result.LoadFromFile( ExtractFilePath(Application.ExeName) + Filename);
end;
end.
调用如下:
procedure TForm1.Button1Click(Sender: TObject);var:
mydata:TMydata;
mystrlist:Tstringlist;
begin //mydata:=TMydata.create; //去掉这句,下面的mydata.Getdata使用也正常
mystrlist:=mydata.Getdata('test.txt'); Label1.Caption := mystrlist[0];
Label2.Caption := mystrlist[1];
Label3.Caption := mystrlist[2]; mystrlist.free;
mydata.free
end;为什么只是声明了mydata:TMydata; 后面没有Create,mydata的Getdata方法也可以正常使用啊?
(我知道,Getdata方法如果有操作其实类成员的语句会出错,没create,所以没分配内存,这正常)
但是,不是例的实例被创建后才可以使用吗?
TMydata = class
private
protected
public Function Getdata (const Filename : String):Tstringlist; end;implementation
Function TMydata.Getdata(const Filename : String):Tstringlist;
begin
Result:=Tstringlist.Create;
Result.LoadFromFile( ExtractFilePath(Application.ExeName) + Filename);
end;
end.
调用如下:
procedure TForm1.Button1Click(Sender: TObject);var:
mydata:TMydata;
mystrlist:Tstringlist;
begin //mydata:=TMydata.create; //去掉这句,下面的mydata.Getdata使用也正常
mystrlist:=mydata.Getdata('test.txt'); Label1.Caption := mystrlist[0];
Label2.Caption := mystrlist[1];
Label3.Caption := mystrlist[2]; mystrlist.free;
mydata.free
end;为什么只是声明了mydata:TMydata; 后面没有Create,mydata的Getdata方法也可以正常使用啊?
(我知道,Getdata方法如果有操作其实类成员的语句会出错,没create,所以没分配内存,这正常)
但是,不是例的实例被创建后才可以使用吗?
解决方案 »
- dll动态调用完毕,将dll中函数计算出的值赋给其它变量时出错。
- 替公司招Delphi开发人员,公司工作地点:珠海
- SQL语句比我用dataset遍历赋值的速度快得太多,我有办法加速我的语句吗?主要是速度差别太大了
- 分太多了,问个小问题,顺便给分。第一个回答对的,给全分
- 急:DELPHI +SQLSERVER2000系统出现连接占线错误,请高手指点
- 简单数据库问题
- 交叉数据显示界面
- case的语法是怎么样??
- Exe运行程序是否可以插入Excel表格内
- 问一个小问题在线等待,马上给分。
- 桌面快截
- 收藏 不显示删除回复显示所有回复显示星级回复显示得分回复 使用SimpleDataSet控件向数据库提交SQL语句前需要先清空原有的SQL语句?[
但类成员变量则只有在类对象实例化之后才会分配内存,
这样解释的话,你的情况就能说的通了。
Getdata方法里,使用类的其它字段的语句会报错,去掉使用其它字段的语句就正常了加上mydata:=TMydata.create;的话,两种情况都正常mydata 应该没有正常创建