> On Jul 27, 2018, at 10:16 AM, Dmitry Boyarintsev <[email protected]>
> wrote:
>
> type
> TRobust = class(TObject)
> public
> v : Integer;
> procedure RobustMethod;
> end;
>
> procedure TRobust.RobustMethod;
> begin
> if Self = nil then Exit; // remove or comment out this line to start
> getting AVs
> v := 5;
> end;
>
> var
> r : TRobust;
> begin
> r := nil;
> r.RobustMethod;
> end.
>
I had no idea you could do that!
I’m totally confused now. Since when was it ok to call methods on nil objects?
According to this test not only can you call methods on nil objects but it
calls the method statically (like a class method), i.e the test prints
“DoThis”. How is that possible?
type
TMyClass = class
procedure DoThis;
end;
procedure TMyClass.DoThis;
begin
writeln('DoThis');
end;
var
obj: TMyClass;
begin
obj := nil;
obj.DoThis;
Regards,
Ryan Joseph
_______________________________________________
fpc-pascal maillist - [email protected]
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal