TSL语言基础 > Object TSL > 方法

Self    

  • 在实现方法时,标志符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