取私有字符串的值 ( 积分: 50 )

  • 主题发起人 主题发起人 hopegood
  • 开始时间 开始时间
H

hopegood

Unregistered / Unconfirmed
GUEST, unregistred user!
TSqxPersistent = class(TPersistent)
private
FInt: Integer;
FStr: String;
FStr1: String;
public
constructor Create;
end;
constructor TSqxPersistent.Create;
begin
FInt := 774;
FStr := 'sqxsqxsqx_ fksljfkafdjsfd';
FStr1 := 'sqx';
end;

procedure TForm1.Button1Click(Sender: TObject);
var
lSQXPersistent: TSQXPersistent;
x: pShortstring;
begin
lSQXPersistent := TSQXPersistent.create;
x := pShortstring(Pinteger(Integer(lSQXPersistent)+8+sizeof(Integer))^);
showmessage(x^);//应该是‘sqx’,但为什么是‘qx’
end;
 
怎么没有人回答的,是不是太简单呢
 
严重违反OO啊!既然是你外部要用的属性,那应该声明到public或者published,而不是private.
 
我只是要了解一下对象的内存结构
 
procedure TForm1.Button1Click(Sender: TObject);
var
lSQXPersistent: TSQXPersistent;
x: string;
begin
lSQXPersistent := TSQXPersistent.create;

x := string(Pinteger(Integer(lSQXPersistent)+8+sizeof(Integer))^);
showmessage(x);
end;
 
可以,但为什么
x := pShortstring(Pinteger(Integer(lSQXPersistent)+8+sizeof(Integer))^);
不行,而 x := string(Pinteger(Integer(lSQXPersistent)+8+sizeof(Integer))^);
却可以呢
 

Similar threads

后退
顶部