在实现方法时,标志符Self 引用方法所属的对象,如果是类方法,Self引用方法所属的类。
格式为:
Self.functionName();
编译器会自动匹配所调用的方法,Self方法一般可以省略。
有一点注意的是:
Self总是指向当前的实例对象。而不是Self所在的类的实例对象。与继承混合使用是需要注意。
示例:
Program test;
type A= class
Function F(); virtual;
Begin
Self.F2();
End;
Function F2();virtual;
Begin
Writeln("A.F2");
End;
End;
Type B = class(A)
Function F2();override;
Begin
Writeln("B.F2");
End;
end;
Begin
AA:=CreateObject("A");
AA.F();//输出 A.F2;
BB:=CreateObject("B");
BB.F();//输出 B.F2()
End.
说明:
AA:=CreateObject("A");
AA.F();//输出 A.F2;
创建了类型A的实例对象,F()中的Self.F2(),表示调用的是类型A的F2();
BB:=CreateObject("B");
BB.F();//输出 B.F2()
以上代码创建了类型B的实例对象,F()中的Self.F2()表示调用类型B的F2()
Self的这种特性在某些情况下会出现理解上的歧义,如果想固定Self的意义,让他只表示当前的类。需要用Class(ClassName).FunctionName做替换。
以上代码中的Self.F2()需要换成 Class(A).F2();
那么以上代码输出
A.F2
A.F2