clear CLEAR ALL = PubSpermer("myclass") = PubSpermer("myclass", "MySet1") = PubSpermer("myclass1") = PubSpermer("myclass1", "MySet2") LIST MEMORY LIKE My* = PubSpermer("myclass", "goMyStore") = PropSpermer("myClass", "MyProp") SET STEP ON FUNCTION ObjSpermer(tcClass, tcName) return IIF(EMPTY(m.tcName), ; CREATEOBJECT(m.tcClass), ; CREATEOBJECT(m.tcClass, m.tcName) ) FUNCTION PubSpermer(tcClass, tcName) LOCAL loTmp, lcVar loTmp = ObjSpermer( m.tcClass, m.tcName) lcVar = loTmp.Name IF TYPE(lcVar) == "U" PUBLIC &lcVar STORE m.loTmp TO (m.lcVar) ELSE WAIT WINDOW lcVar + " already in scope!" endif return FUNCTION PropSpermer(tcClass, tcName) LOCAL loTmp, lcVar loTmp = ObjSpermer( m.tcClass, m.tcName) lcVar = loTmp.Name IF TYPE("goMyStore." + lcVar) == "U" goMyStore.Addproperty(m.lcVar) STORE m.loTmp TO ("goMyStore." + m.lcVar) ELSE WAIT WINDOW lcVar + " already exists" endif return DEFINE CLASS myclass AS CUSTOM PROCEDURE INIT LPARAMETERS tcObjName IF !EMPTY(m.tcObjName) this.Name = m.tcObjName endif ENDPROC ENDDEFINE DEFINE CLASS myclass1 AS myclass name = "MyDefined" ENDDEFINE