过载功能&程序,任何规则?

时间:2013-03-29 22:40:55

标签: delphi

我想对程序和功能使用相同的名称,我可以这样做,有关这个问题的任何规定吗?

 /// first version 
 function RunMyImageProcess (aRect : TRect; aBitmap : TBitmap ):  TPoint; overload ;

 ///  a overload version, this works  , it is simple :-) 
 function RunMyImageProcess (aRect : TRect; aBitmap : TBitmap ; aprocessflag : Boolean):  TPoint; overload ; 

 ///  need now a procedure
 ///  will return 2 Points now !!!
 ///   can I do this in DELPHI ???? 
 procedure RunMyImageProcess (var LowerLeft, Upperright: TPoint; aBitmap : TBitmap ; aprocessflag : Boolean):  boolean; overload ;

1 个答案:

答案 0 :(得分:8)

您可以使用相同的名称重载功能和过程。

但是,您不能依赖函数返回类型来进行过载区分。因此,如果您有一个函数和一个具有相同参数列表的过程,则它们不能被重载。

我会提醒你不要因为超载而生气。你可以陷入各种各样的陷阱。例如,如果基于浮点或整数参数进行区分,则很难确定要调用的是哪个重载。当您区分指针和动态数组时,也存在很多混淆的空间,因为Embarcadero发现了XE3 TStream重载。

事实上,重载规则的文档是不完整的,完全理解编译器行为的唯一方法是通过逆向工程。