> >> If so, what side-effects would this cause when applied across the
> >> complete class-hierarchy?
> >
> > Blow up the size of you executable.
>
> And a virtual method call is slower than a non-virtual call.
> (as it needs to do a few lookups: class, VMT)
>
> To ensure self is not nil, you can insert a check in a method
> itself. However, you cannot defend yourself against an
> invalid (but non-nil) object pointer. (I.e. a pointer to an
> object that is freed already.)
>

That's why you use a class method. In Delphi you can call a class method
upon an object instance. In that case "self" will contain the Object
Instance you called it upon (which can be "nil") and not the class reference

E.g.

Type

 Tsomething=class
  class procedure DoSomethingSafe;
  procedure DoSomething;
 end;     

Procedure Tsomething.DoSomething;
Begin
 //access some class fields etc.
End;

procedure Tsomething.DoSomethingSafe;
Begin
 if self<>nil then
  DoSomething;
End;

Var
 x:Tsomething;

Begin
 x:=nil;
 x.DoSomethingSafe;
End.

----------------
George Birbilis ([EMAIL PROTECTED])
Microsoft MVP J# for 2004-2006
Borland "Spirit of Delphi"
* QuickTime, QTVR, ActiveX, VCL, .NET
http://www.kagi.com/birbilis
* Robotics
http://www.mech.upatras.gr/~Robotics
http://www.mech.upatras.gr/~robgroup




  _____  

avast! Antivirus <http://www.avast.com> : Outbound message clean. 


Virus Database (VPS): 0625-0, 19/06/2006
Tested on: 19/6/2006 1:18:18 ??
avast! - copyright (c) 1988-2006 ALWIL Software.



_________________________________________________________________
     To unsubscribe: mail [EMAIL PROTECTED] with
                "unsubscribe" as the Subject
   archives at http://www.lazarus.freepascal.org/mailarchives

Reply via email to