5
5415
Unregistered / Unconfirmed
GUEST, unregistred user!
在做HIS(Hospital information system)的时候,由于开发一些控件以及处理一些BUG
看了一看Delphi 的源码,特别是Database部分的,看到了一些十分奇怪的事情。
首先是在我的FieldEditor(一个自适应的字段编辑器)的时候,我的FieldName字段在
Object Inspector中怎么也不能用下拉框选择(如TDBEdit的那样),只能用Edit自己
填,百思不得其解,最后将property的名字改成DataField(如TDBEdit)后就可以选择
了......
然后,在同上一个控件的编写过程中,我发现在某些特定的环境下(当然是Delphi确定
的),一个类可以调用另一个类的私有的变量或是过程,大家不妨看看DB.Pas,其中有
不少精彩的例子......
第三个和Delphi的Bug有关,由于编译器的实现问题,在For语句的To部分写的表达式在
循环开始时计算一次后不再计算,也就是说,在循环过程中终结变量不会在发生变化,
循环次数在循环开始时就已经定好,然而,在源码中发现,在Delphi DB部分的事件处理
过程中,DataSet对于每一个相连的Datalink调用事件处理时用的就是For语句,也就是说,
在DataSet的事件处理过程中,不可以修改与其相连的DataSource或是Field等,不然的话就会产生异常,报告List out of bounds,这个异常在我们的HIS系统中已出现过多次,在修改了源码后才得到解决。
第四个问题更加离谱,在DataSet的实现中,部分过程的实现在源码中是不存在的,然而此源码居然可以编译通过,Inprise的小动作实在是不少的说......
在这次设计中,我对Delphi 的印象差了很多,见鬼的VCL的类结构,绝大多数的过程都
不是虚的,为数不多的虚方法都是为了自身的实现,根本不考虑可扩展性,另外还有不计
其数的私有方法,要写个控件不容易呀......各种各样的补丁......极不稳定的BDE.....
上帝保佑Delphi吧,至少它比VB和PowerBuilder要开放一些,但实在是比不上C++,也
许是因为C++是通用语言,而VB/Object Pascal/PowerScript都是专有语言的原因吧.....