1.类的方法参数可以分为四种(默认参数(传值)、var(传址)、out(输出)、const(常数))。这里需要注意的是var定义的参数,例如:
{var参数是传址, 会被改变}
function MyF2(var x: Integer): Integer;
begin
Inc(x);
Result := x;
end;
Inc(x):表示对x的内存地址加1,这将导致方法返回的值的变化。
对于out(输出),其用法和var一致,所以在一般情况下我们采用var来定义而不是out;对于const,则表示该定义的变量为常量,常量的值无法改变。
2.implementation区/interface区的方法
对于implementation区中的方法,只能在本单元中调用。这里就不举例子了,在之前的举例中都有涉及。
对于interface区中的方法,可以被其它单元调用。
3.在类中的方法
如果一个方法被声明在一个类中,那么调用该方法前就必须先对该类进行初始化。这与其他语言对于类中方法的调用是一致的;并且在实现该方法时,必须在方法名前加上类的前缀,例如:
{函数在实现区必须有 TForm1. 作为前缀}
function TForm1.MyFun(x,y: Integer): Integer;
begin
Result := x + y;
end;
4.调用其他单元的函数
在调用其他单元的函数时,被调用单元的函数必须在interface区中声明,并在implementation区中也实现。在调用时,我们需要对其单元进行引用,例如:
implementation
{$R *.dfm}
uses Unit2; {必须 uses 定义函数的单元}
procedure TForm1.Button1Click(Sender: TObject);
var
i: Integer;
begin
i := MyFun(1,2); {调用函数}
//i := Unit2.MyFun(1,2); {有时为了避免重名, 需要这样调用}
ShowMessage(IntToStr(i)); {3}
end;
5.方法的提前声明
如果前面的方法需要调用后面的方法,则需要在被调用的方法中声明forward指示字。例如:
function MyFunB(x: Integer): Integer; forward; {使用 forward 指示字提前声明}
function MyFunA(x: Integer): Integer;
begin
Result := MyFunB(x) * 3; {要调用后面的方法, 后面的方法需要提前声明}
end;
function MyFunB(x: Integer): Integer;
begin
Result := Abs(x);
end;
但如果该方法已在interface区中提前声明了,那么就无需在对方法添加forward指示字了。
6.静态数组做参数
对于静态数组做参数,我们需要在Type区把数组定义成一个类型,在对该类型定义一个变量,最后在使用该变量。例如:
//应该先把数组定义成一个类型
Type
IntArray = array[0..9] of Integer; {先把需要的数组定义成一个类型}
//给一个静态数组求和的函数
function MyFun(arr: IntArray): Integer;
var
i: Integer;
begin
Result := 0;
for I:= 0 to Length(arr)-1 do
begin
Result := Result + arr[I];
end;
end;
而对于开放数组参数,则可以将其直接作为参数来使用,不需要在Type区将其定义为一个类型。例如:
function MyFun(const arr: array of Integer): Integer;
对于遍历开放数组也需要注意,因不知其长度,所以在遍历时需要用到Low()和High()方法,例如:
for i := Low(iArr) to High(iArr) do
begin
iArr[i] := i + 1;
end;
7.指针参数
在方法中传递指针,我们需要用指针类型来定义。具体实现如下:
function MyFun(p: PInteger): Integer; {PInteger 是 Integer 的指针类型}
begin
p^ := p^ * 2;
Result := p^;
end;
在调用该函数时,需要用@来获取变量的地址,例如:
var
i,x: Integer;
begin
i := 8;
x := MyFun(@i);
9.方法重载
方法的重载只要用在方法重名但参数不一样的情况,在方法后面必须声明overload指示字。在调用时根据参数来决定调用哪个方法。这与其他语言的重载相似。在published区中的方法命名要有唯一性,该区域方法不能被重载。