LOCAL clsMyClass as MyClass clsMyClass = CREATEOBJECT("MyClass") WITH clsMyClass * This property is public so I should be able to set it. .PublicProperty = "Set" * This property is read-only so I should NOT be able to set it. .ReadOnlyProperty = "Set" * I should be able to read both of these properties. ? .PublicProperty ? .ReadOnlyProperty ENDWITH DEFINE CLASS MyClass AS Custom PublicProperty = "Unset" ReadOnlyProperty = "Unset" HIDDEN PROCEDURE ReadOnlyProperty_Assign(varNewValue) *This.ReadOnlyProperty = varNewValue ENDPROC HIDDEN PROCEDURE Init This.PublicProperty = "Initialized" This.ReadOnlyProperty = "Initialized" ENDPROC ENDDEFINEThis code DOES make the property read-only from outside of the class. However, unless I'm missing something (which is entirely possible,) it also makes it read-only from within the class. You cannot change the value of .ReadOnlyProperty from within the class. If I uncomment the line in the Assign method, the property is no longer read-only at all. Even though the procedure is hidden, it always executes. You may not be able to call it directly from outside of the class, but it always executes when you attempt to change the value of the .ReadOnlyProperty.