rtti的难题(200分)

  • 主题发起人 主题发起人 6559026
  • 开始时间 开始时间
6

6559026

Unregistered / Unconfirmed
GUEST, unregistred user!
给定一个变量,他可以是integer,也可以是一个对象,用什么方法可以
在程序的执行当中判断他到底是不是一个对象?
 
if v is TObject then
是一个对象

delphi的所有对象都从TObject继承

-----
http://www.8421.org
 
如果v 是integer的话,你的代码根本不能通过编译,因为对integer不能使用is操作符。
 
请看 lid=574052 ——根本不可能实现完全准确的判断。如果一定要这个功能,建议用Variant
作为入口参数类型,然后在过程内部判断它包含的数据类型。
——现在提出这种要求的人越来越多了,都是滥用高级语言带来的“方便”的结果。把那些污七
八糟的玩意儿通通扔掉!不同的参数,就用不同的过程来处理,不就打字的时候要多打几个字吗?
你花费在思考如何过程内判断参数类型的时间要比打字多得多!

还可以参考 http://www.delphibbs.com/delphibbs/dispq.asp?lid=839586
 
编译测试通过!

function IsObject(const v): Boolean;
begin
Result := False;
try
TObject(v).ClassName;
Result := True;
except
end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
i: Integer;
begin
i := 1;
if not IsObject(i) then ShowMessage('i is not object');
if IsObject(Self) then ShowMessage('self is object');
end;
 
为什么integer,char,boolean,real不做成类哪?
 
因为Delphi不是Java
Delphi并不是纯面向对象的。
 
twos, 时间:2002-7-11 10:14:00, ID:1197347
》因为Delphi不是Java
》Delphi并不是纯面向对象的。

我觉得只是思路不同。
我愿意接受现在这样的(delphi):)
 
即使在JAVA中也不全是类,只是每个不是类的类型,都有一个相应的类而已,只有像SmallTalk才是全是类。

常用的数据类型不用类最大的好处是效率高。

滥用RTTI不是一个好做法
 
请教
何谓:滥用RTTI
 
我觉得RTTI是语言本身的,究极RTTI能够带来些许的方便,但是有可能给程序带来不可阅读
性,增加了复杂度,甚至将来Delphi8出来的时候一直都会困难一些。
我觉得应该是了解掌握,在实际应用中能够带来很大的便利的,并且可维护性强的情况下我
才会考虑使用RTTI。
(不过学习语言底层或许会有一种满足吧)
 
不安全的代码呀
 
如果楼主真的有这样的应用,建议换个思路吧
 
什么叫做"纯"面向对象? 就是所有的东西都是对象吗?
没有对象以外的东西是吧?
 
to qdyoung:
你这种利用TRY ...EXCEPT机制真的很不好
 
后退
顶部