Inheritance levels


 


The program below generates  code to demonstrate 1000 levels of inheritance of VFP objects. The code looks like this:


 


DEFINE CLASS c1 as c2


ENDDEFINE


 


DEFINE CLASS c2 as c3


ENDDEFINE


 


DEFINE CLASS c3 as c4


ENDDEFINE


 


 


That means class “c1” is a subclass of class “c2”, etc. On my machine, 1000 levels of inheritance run almost instantaneously. Try adding more levels and you’ll run into some limitations.


 


There are a few different kinds of limitations that you can hit, depending on how you modify the code sample. One is the Thread Stack size for each thread of the process. Another is VFP’s STACKSIZE


If you change the baseclass to be a Form, then you’ll run into a GDI limit on the number of windows created. On my machine the RegisterDragDrop call fails. I don’t get an error dialog, because there are too many windows already created!


 


 


 


CLEAR ALL


CLEAR


 


SET TEXTMERGE ON  TO temp.prg noshow


NLEV=1000


      \NUM=1000


      \CLEAR


      \DIMENSION x[NUM]


      \ns=SECONDS()


      \FOR j = 1 TO NUM


      \     x[j]=CREATEOBJECT(“c1”)


      \ENDFOR


      \x[NUM].Foobar(“param”)


      \?SECONDS()-ns


      FOR i = 1 TO NLEV


            \DEFINE CLASS c<<i>> as c<<i+1>>


            \ENDDEFINE


            \


      ENDFOR


     


      \DEFINE CLASS c<<NLEV+1>> as custom


      \     PROCEDURE Foobar(p1)


      \           ?PROGRAM(),this.baseclass,this.name


      \ENDDEFINE


     


     


SET TEXTMERGE to


 


*?FILETOSTR(“temp.prg”)


COMPILE temp


MODIFY COMMAND temp nowait


 

Comments (1)

  1. Calvin,

    I noticed your reference to the new VFP 9 STACKSIZE setting in CONFIG.FPW. I’m curious what other settings (and their values) you and others use for your CONFIG.FPW files … especially given deprecated settings and the new settings added to recent releases of VFP.

    Any takers?

    Malcolm

    PS: I enjoy your blog posts!