+ -
当前位置:首页 → 问答吧 → 弱弱的问题,TStrings.Object这个属性有什么作用

弱弱的问题,TStrings.Object这个属性有什么作用

时间:2011-12-24

来源:互联网

一直不怎么明白,请举个例子,谢谢

作者: wangwei244157887   发布时间: 2011-12-24

顶顶帖子先

作者: sgzhou12345   发布时间: 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;
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

引用 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;
i: TInfo;
beg……


 s.AddObject('123',i); 
上面这句话,是不是相当于,S这个变量既加载了‘123’这个字符串变量,又加载了Tinfo这个变量呢,所以在
S[0]这个位置是‘123’,如果S.objects[0],就是Tinfo,这两个都是变量,在内存中是占用同一个内存地址吗

作者: wangwei244157887   发布时间: 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(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

引用 3 楼 wangwei244157887 的回复:

引用 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

引用 4 楼 pathletboy 的回复:

引用 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

var
  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

引用 6 楼 wangwei244157887 的回复:

引用 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

引用 8 楼 pathletboy 的回复:

引用 6 楼 wangwei244157887 的回复:

引用 4 楼 pathletboy 的回复:

引用 3 楼 wangwei244157887 的回复:

引用 2 楼 pathletboy 的回复:

Delphi(Pascal) code
type
TInfo = class
private
FInfo: string;
public
property……


恩,谢谢你的回答,明白了90%,呵呵

作者: wangwei244157887   发布时间: 2011-12-24

热门下载

更多