| type   TMyClass = class     procedure MyProc;     function MyFunc: Integer;   end;     { TMyClass }   procedure TMyClass.MyProc; var   X: Integer; begin   X := MyFunc; end;   function TMyClass.MyFunc: Integer; begin   WriteLn('TMyClass.MyFunc called'); end;   type   TMyClassHelper = class helper for TMyClass     procedure HelloWorld;     function MyFunc: Integer;   end;   procedure TMyClassHelper.HelloWorld; begin   Writeln(Self.ClassName); // Self refers to TMyClass type, not TMyClassHelper end;   function TMyClassHelper.MyFunc: Integer; begin   WriteLn('TMyClassHelper.MyFunc called'); end;   procedure TForm1.W3Button4Click(Sender: TObject); var    X: TMyClass; begin    X := TMyClass.Create;    X.MyProc;     // Calls TMyClass.MyProc    X.HelloWorld; // Calls TMyClassHelper.HelloWorld    X.MyFunc;     // Calls TMyClassHelper.MyFunc end; |