I don't know what do you mean by 'external users', but ArrayList has static
method ReadOnly that returns readonly wrapper around the array lists or
objects that expose IList interface.
If you want strongly type collections you can inherit form
ReadOnlyCollectionBase and create your own. You may have for example
internal methods for modifying the collections and public methods for
accessing elements in a readonly manner.