James
Code:
'SED_PBCC '=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=* ' Test of inheritence and Method Overrides (PBCC 5.0) ' James C. Fuller August 2, 2008 ' [email protected] '=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=* 'Note the use of both ME and MYBASE. 'As it was explained to me: 'Even though they seem to produce the same results ME is for use with the 'derived Class/Interface methods where MYBASE is for use with the Base Class/Interface 'Methods. 'To confuse a bit more(?) ME is also used for access to all base class instance variables 'from within a derived class. '============================================================================== CLASS cBase INSTANCE LBase AS LONG,sBase AS STRING INTERFACE iBase : INHERIT IUNKNOWN METHOD mBase( BYVAL a AS LONG) ? "mBase a = ";FORMAT$(a) END METHOD PROPERTY GET LBase() AS LONG PROPERTY = LBase END PROPERTY PROPERTY SET LBase(BYVAL Param AS LONG) LBase = Param END PROPERTY PROPERTY GET sBase() AS STRING PROPERTY = sBase END PROPERTY PROPERTY SET sBase(BYVAL Param AS STRING) sBase = Param END PROPERTY METHOD OrMeth() ?"iBase OrMeth" END METHOD END INTERFACE END CLASS '------------------------------------------------------------------------------ CLASS cDrvOne INSTANCE sDrvOne AS STRING INTERFACE iDrvOne : INHERIT cBase,iBase OVERRIDE METHOD OrMeth() ?"iDrvOne OrMeth" MYBASE.OrMeth END METHOD METHOD mDrvOne(BYVAL b AS LONG) ?"mDrvOne b = ";FORMAT$(b) END METHOD PROPERTY GET sDrvOne() AS STRING PROPERTY = sDrvOne END PROPERTY PROPERTY SET sDrvOne(BYVAL Param AS STRING) sDrvOne = Param END PROPERTY END INTERFACE END CLASS '------------------------------------------------------------------------------ CLASS cDrvTwo INSTANCE sDrvTwo AS STRING INTERFACE iDrvTwo : INHERIT cDrvOne,iDrvOne OVERRIDE METHOD OrMeth() ?"iDrvTwo OrMeth" MYBASE.OrMeth END METHOD METHOD mDrvTwo(BYVAL c AS LONG) ?"mDrcTwo c = ";FORMAT$(c) END METHOD PROPERTY GET sDrvTwo() AS STRING PROPERTY = sDrvTwo END PROPERTY PROPERTY SET sDrvTwo(BYVAL Param AS STRING) sDrvTwo = Param END PROPERTY END INTERFACE END CLASS '------------------------------------------------------------------------------ CLASS cDrvThree INSTANCE sDrvThree AS STRING INTERFACE iDrvThree : INHERIT cDrvTwo,iDrvTwo OVERRIDE METHOD OrMeth() sDrvThree = "sDrvThree" Me.sDrvTwo = "sDrvTwo" Me.sDrvOne = "sDrvOne" Me.sBase = "sBase" ?"iDrvThree OrMeth" MYBASE.OrMeth END METHOD METHOD mDrvThree(BYVAL d AS LONG) ?"mDrvThree d = ";FORMAT$(d) END METHOD METHOD mDrvThree3() ?"mDrvThree3 LBase = ";FORMAT$(Me.LBase) 'While this works ME SHOULD be used for iDrvThree method access and 'MYBASE for all base class/interface method calls for clarity. ME.mDrvOne(1) MYBASE.mDrvOne(2) END METHOD METHOD PrintAllStrings() 'Use Me to access base class instance variables ?"sBase = ";Me.sBase ?"sDrvOne = ";Me.sDrvOne ?"sDrvTwo = ";Me.sDrvTwo 'ME not needed here as sDrvThree is dfined in cDrvThree Class ?"sDrvThree = ";sDrvThree END METHOD PROPERTY GET sDrvThree() AS STRING PROPERTY = sDrvThree END PROPERTY PROPERTY SET sDrvThree(BYVAL Param AS STRING) sDrvThree = Param END PROPERTY END INTERFACE END CLASS '------------------------------------------------------------------------------ FUNCTION PBMAIN() AS LONG LOCAL oDrvThree AS iDrvThree oDrvThree = CLASS "cDrvThree oDrvThree.mDrvThree(17) 'You have access to all methods and intance varaibles oDrvThree.mDrvOne(55) oDrvThree.mBase(66) oDrvThree.LBase = 8 PRINT "-------------------" oDrvThree.mDrvThree3 PRINT "-------------------" 'Override methods test oDrvThree.OrMeth PRINT "-------------------" oDrvThree.PrintAllStrings PRINT "-------------------" 'You have access to all varibles through the oDrvThree Object. oDrvThree.sBase = "sBase Changed From PBMain" oDrvThree.sDrvOne = "sDrvOne Changed From PBMain" oDrvThree.sDrvTwo = "sDrvTwo Changed From PBMain" oDrvThree.sDrvThree = "sDrvThree Changed From PBMain" oDrvThree.PrintAllStrings WAITKEY$ END FUNCTION