弱弱的问题,TStrings.Object这个属性有什么作用
时间:2011-12-24
来源:互联网
作者: wangwei244157887 发布时间: 2011-12-24

作者: sgzhou12345 发布时间: 2011-12-24
type TInfo = class private FInfo: string; public property Info: string read FInfo write FInfo; end;
Delphi(Pascal) code
var s: TStringList; i: TInfo; begin s := TStringList.Create; i := TInfo.Create; try i.Info := 'info'; s.AddObject('123',i); ShowMessage(s[0]); ShowMessage((s.Objects[0] as TInfo).Info); finally i.Free; s.Free; end;
可以为某行string附加一个数据,数据类型是一个对象。
作者: pathletboy 发布时间: 2011-12-24
Delphi(Pascal) code
type
TInfo = class
private
FInfo: string;
public
property Info: string read FInfo write FInfo;
end;
Delphi(Pascal) code
var
s: TStringList;
i: TInfo;
beg……
s.AddObject('123',i);
上面这句话,是不是相当于,S这个变量既加载了‘123’这个字符串变量,又加载了Tinfo这个变量呢,所以在
S[0]这个位置是‘123’,如果S.objects[0],就是Tinfo,这两个都是变量,在内存中是占用同一个内存地址吗
作者: wangwei244157887 发布时间: 2011-12-24
引用 2 楼 pathletboy 的回复:
Delphi(Pascal) code
type
TInfo = class
private
FInfo: string;
public
property Info: string read FInfo write FInfo;
end;
Delphi(Pascal) code
var
s: TStringList;……
Delphi(Pascal) code
function TStringList.Add(const S: string): Integer; begin Result := AddObject(S, nil); end;
看这个明白没?源代码会给你解释。
作者: pathletboy 发布时间: 2011-12-24
引用 2 楼 pathletboy 的回复:
Delphi(Pascal) code
type
TInfo = class
private
FInfo: string;
public
property Info: string read FInfo write FInfo;
end;
Delphi(Pascal) code
var
s: TStringList;……
当然不可能占同个内存地址,他设计的时候就是2块,1块放string,1块放object,只不过一般使用用不到,也就是nil。
作者: pathletboy 发布时间: 2011-12-24
引用 3 楼 wangwei244157887 的回复:
引用 2 楼 pathletboy 的回复:
Delphi(Pascal) code
type
TInfo = class
private
FInfo: string;
public
property Info: string read FInfo write FInfo;
end;
Delphi(Pa……
明白了,呵呵,谢谢啊,不过我有个问题,比如我一个下面这样声明:
var
a:Integer ;
b:TStringList ;
begin
b:=TStringList.creat ;
b.obect[0]:=TObject[a];
如上面所示,TObject[a],这样是强制生成一个类吗?把一个整数转换为一个类?
作者: wangwei244157887 发布时间: 2011-12-24
a:Integer ;
b:TStringList ;
begin
b:=TStringList.creat ;
b[0]:='1';
b.obect[0]:=TObject[a];
这样子声明,也就是说b这个变量,在Index=0 的时候,String 为'1',Obejct为TObject[a]了,呵呵,是吗?
作者: wangwei244157887 发布时间: 2011-12-24
引用 4 楼 pathletboy 的回复:
引用 3 楼 wangwei244157887 的回复:
引用 2 楼 pathletboy 的回复:
Delphi(Pascal) code
type
TInfo = class
private
FInfo: string;
public
property Info: string read FInfo write F……
1、你没Add,所以b.Object[0]不能直接使用。
2、你语法有错误。
3、4字节以下变量可以直接转换为指针形式存储在TObject字段中,但是你a与b.Objects[0]不是同一块内存。
Delphi(Pascal) code
var a: Integer; s: TStringList; begin s := TStringList.Create; try s.Add('123'); a := 321; s.Objects[0] := TObject(a); finally s.Free; end;
4、如果要使得a与TObject同块内存应该使用指针。
Delphi(Pascal) code
var pa: PInteger; s: TStringList; begin s := TStringList.Create; try s.Add('123'); New(pa); pa^ := 321; s.Objects[0] := TObject(pa); pa^ := 123; Dispose(pa); finally s.Free; end;
作者: pathletboy 发布时间: 2011-12-24
引用 6 楼 wangwei244157887 的回复:
引用 4 楼 pathletboy 的回复:
引用 3 楼 wangwei244157887 的回复:
引用 2 楼 pathletboy 的回复:
Delphi(Pascal) code
type
TInfo = class
private
FInfo: string;
public
property……
恩,谢谢你的回答,明白了90%,呵呵
作者: wangwei244157887 发布时间: 2011-12-24
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28