Code: Select all
#singleInstance Force
#NoEnv
;Last tested 20220215055320 with AHK v 1.1.33.10
;https://www.autohotkey.com/boards/viewtopic.php?f=7&t=100364
class classObj {
static statVar := "statVarVal" ; https://www.autohotkey.com/docs/Objects.htm#Custom_Classes_staticvar
instVar := "instVarVal" ; https://www.autohotkey.com/docs/Objects.htm#Custom_Classes_staticvar
}
/*
rules
r1 - classObj.instVar NOT initialized with value set in class definition
r2 - both instVar and statVar of both classObj and instanceObj MAY be set manually (i.e., outside the class definition)
r3 - classObj.statVar, instanceObj.instVar, & instanceObj.statVar ARE initialized with value set in class definition
r4 - manual set of classObj.instVar affects ONLY classObj copy of instVar
r5 - manual set of statVar of classObj or instanceObj affects ALL classOBj & instanceObj copies of statVar
r6 - manual set of instVar or statVar of instanceObj affects only instanceObj copy
| classObj.instVar | classObj.statVar | instanceObj.instVar | instanceObj.statVar
------------------+------------------+------------------+---------------------+--------------------
initialized with | false (r1); can | true (r3); can | same as <- | same as <-
value set in | be set manually | be set manually | |
class definition | though (r2) | also (r2) | |
------------------+------------------+------------------+---------------------+--------------------
manual set | only classObj | all classObj & | only instanceObj | same as <-
affects | copy (r4) | instanceObj | copy (r6) |
| | copies (r5) | |
*/
;msgbox % classObj.statVar ; statVarVal ; r3
;msgbox % classObj.instVar ; "" ; r1
;msgbox % classObj.statVarObj.key1 ; val1 ; r3
;msgbox % classObj.instVarObj.key1 ; "" ; r1
instanceObj1 := new classObj ; ; r3 (note 1)
;msgbox % instanceObj1.statvar ; statVarVal ; r3 (note 1 above)
;msgbox % instanceObj1.instVar ; instVarVal ; r3 (note 1 above)
instanceObj2 := new classObj ; ; r3 (note 2)
classObj.instVar := "instVarVal2" ; ; r2 (note 3)
;msgbox % classObj.instVar ; instVarVal2 ; r2 (note 3 above)
;msgbox % instanceObj1.instVar ; instVarVal ; r4 & r3 (note 1 above)
;msgbox % instanceObj2.instVar ; instVarVal ; r4 & r3 (note 2 above)
classObj.statvar := "statVarVal2" ; ; r2 (note 4)
;msgbox % classObj.statVar ; statVarVal2 ; r2 & r5
;msgbox % instanceObj1.statvar ; statVarVal2 ; r5
;msgbox % instanceObj2.statVar ; statVarVal2 ; r5
instanceObj1.instVar := "instVarVal3" ; ; r2 (note 5)
;msgbox % classObj.instVar ; instVarVal2 ; r6 & r2 (note 3 above)
;msgbox % instanceObj1.instVar ; instVarVal3 ; r6 & r2 (note 5 above)
;msgbox % instanceObj2.instVar ; instVarVal ; r6 & r3 (note 2 above)
instanceObj1.statVar := "statVarVal3" ; ; r2 (note 6)
;msgbox % classObj.statVar ; statVarVal2 ; r6 & r2 (note 4)
;msgbox % instanceObj1.statVar ; statVarVal3 ; r6 & r2 (note 6)
;msgbox % instanceObj2.statvar ; statVarVal2 ; r6 & r2 (note 4)
return