As lucamar wrote, a readonly property would not prevent you from modifying it's contents like you do in line 7 of your first code snippet. Using Add, Clear, Assign etc is perfectly possible with a readonly property. Readonly just means you are not allowed to change the (pointer of the) object itself, but of course you can use and modify the contents of the object.