//类中的方法重载首先具备前面说过的重载相关的所有特点, 如: TMyClass = class(TObject) function Fun(s: string): string; overload; function Fun(i: Integer): Integer; overload; function Fun(x,y: Integer): string; overload; end;
//但如果是重载父类中的方法, 如果父类中被重载的方法在本类中没有重载的话, 可以省略 overload 指示字 TBass = class(TObject) function Fun(s: string): string; {这里省略了 overload, 当然也可以不省略} end; TChild = class(TBass) function Fun(i: Integer): Integer; overload; end; {这个很好理解, 父类并不知道哪个子类要重载它的哪个方法}
//published 区中的方法命名要有唯一性, 该区域中的方法不能重载! {这样是不可以的} TMyClass = class(TObject) published function Fun(s: string): string; overload; function Fun(i: Integer): Integer; overload; end;
//这就有一个问题: 公共区域, 在默认情况下是归属于 published 区的, 为什么公共区域的函数可以重载? { 编译器会把公共区域中的重载函数自动归类到 public 区, 也可能会给 published 区一个; 这是我猜的, 没有资料可以参考. 关于这个问题, 我又搞了一个实验: } //在自动生成的 TForm1 类的公共区域添加重载方法: type TForm1 = class(TForm) procedure alert(s: string); overload; {No.1} procedure alert(s1,s2: string); overload; {No.2} private { Private declarations } public { Public declarations } end; //执行编译后, 只会留下第一个: type TForm1 = class(TForm) procedure alert(s: string); overload; {No.1} private { Private declarations } public { Public declarations } end;