I have a class that maintains list of objects of another class. List of objects is a public property. I would like to prevent users from adding and removing objects directly
You can use ReadOnlyCollection - wrap your collection in this and return the ReadOnlyCollection to users of your class:
return new ReadOnlyCollection(innerCollection);
Or using the AsReadOnly method of the List class:
return innerCollection.AsReadOnly();
The IEnumerable interface will do what you need, as it only has one member GetEnumerator(), that will only let you iterate over items.