基本类型怎么转换为 TObject ? ( 积分: 50 )

  • 主题发起人 主题发起人 searoom
  • 开始时间 开始时间
S

searoom

Unregistered / Unconfirmed
GUEST, unregistred user!
比如,把 integer 转换为 TObject 类型,不知道可不可以
 
比如,把 integer 转换为 TObject 类型,不知道可不可以
 
把基本类型转换成TObject 类型????
那你不是想要弄成JAVA的格式,一切都为类了!!!!
 
应该不可以,至少现在想像不出来
 
我看到 jcl 中作了一个容器类, 好像用 Interface 来替代通用类型
类似于 c++ 中的模版的功能.

如果不能的话,怎么实现一个通用的类型呢?
既可以用基本类型替代,也可以用对象
 
var
i:integer;
o:tobject;
begin
i:=1;
o:=tobject(i);//
end;
 
楼上,可以这样吗?

我试试
 
delphi7.0 中提共一个类型强制转换伏 AS.用法为:(sender as tobject).
 
好像Sender本身就是TObject的
 
o:=tobject(i);//这样不行吧?这样做似乎是将地址i处的东东转换为TObject!
 
只要你要转换的类的最上层基类是TObject,目标基类也是这个,那用sender as TObject
应该不会有问题呀
 
多好用的基本类型,偏偏要转化成类。
不知楼主有何居心,^_^
 
我试过了
var
i:integer;
o:TObject;
begin
o:=TObject(i);
end;

这个在语法上没有错误, 而且再次转化
i:=integer(o);
也可以.

但是这样的转化出来的对象 o.ClassName 等属性会出错


to: c_delphi
我的意思是把基本类型转化为对象,而不是那些从 tobject 继承来的类
 
基本型不能直接转换为类,否则问题多多。
 
我试了一下以下几行代码,分别屏蔽掉不同的行出现不同结果:
var
i :integer;
A :TObject;
S :string;
begin
i :=100;
A :=TObject.Create;
A :=TObject(i);
S :=A.ClassName;
showmessage(S);
end;

屏蔽掉 //i :=100
运行以后 S 值为 "TButton"
屏蔽掉 //i :=100 和 //A :=TObject.Create
运行以后 S 值为 "TForm1"
直接运行以上代码即保留 i :=100 就出现错误
 
Tobject类型是指针
Tobject(i)是把integer类型的i转换为Tobject类型,能够这样转换的似乎。。。只有指针和integer类型

至于楼主上面说的:
我试过了
var
i:integer;
o:TObject;
begin
o:=TObject(i);
end;
这个在语法上没有错误, 而且再次转化
i:=integer(o);
也可以.
但是这样的转化出来的对象 o.ClassName 等属性会出错


这样当然会出错,因为这时o是指向一个integer类型的变量i,integer没有classname属性,当然会出错
 
而奇怪的是 将 integer 转化为 tobject 后可以在此转换回来,即 integer(o)
 
当然可以。。。

因为o:=TObject(i)

o是Tobject 也就是说是个指针,如果存其他的类型,o里面存的是该类型的首地址

但是如果把一个integer类型的变量转换为Tobject的时候里面存的不是integer变量的首地址,而是实际变量的值(这么存可能因为指针实际也是个longint类型的变量)
 
hs-kill说的太对了
不知道大家有没有注意过TStringList类的AddObject方法,在delphi的帮助中就有将整行转换为tobjct的例子,自己去看把
 

Similar threads

后退
顶部