12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667 |
- { %fail }
- { %norun }
- program WithForClassTypes;
- {$IFDEF FPC}
- {$mode delphi}
- {$ENDIF}
- type
- TMyObject = class
- x: Integer;
- class procedure Foo; virtual;
- procedure Bar; virtual;
- end;
- TMyObject2 = class(TMyObject)
- class procedure Foo; override;
- procedure Bar; override;
- end;
- TMyClass = class of TMyObject;
- { TMyObject }
- procedure TMyObject.Bar;
- begin
- WriteLn('Bar ', Integer(Pointer(Self)),' ', x);
- end;
- class procedure TMyObject.Foo;
- begin
- WriteLn('Foo');
- end;
- { TMyObject2 }
- procedure TMyObject2.Bar;
- begin
- WriteLn('2Bar ', Integer(Pointer(Self)),' ', x);
- end;
- class procedure TMyObject2.Foo;
- begin
- WriteLn('2Foo');
- end;
- var
- MyClass : TMyClass = TMyObject2;
- begin
- with MyClass do begin
- Foo; // should work
- with Create do try // should work
- x := 3; // should work
- Bar; // should work
- finally
- Free; // should work
- end;
- Foo; // should work
- // x := 1; // should not be allowed
- // Bar; // should not be allowed
- Free; // should not be allowed
- end;
- end.
|