Browsing code today I noticed a potential problem that can cause horrible consequenses if not fixed.
An object exposes a list like so:
public List<Wimwam>Wimwams{get;set;}
which may seem to be quite normal until you look again a the the implications of the property. Here, it is the content of the property being set, namely the collection object itself! This means that it is perfectly possible for a class to fill this list carefully and then have some outside actor change the list under it's nose. This clearly breaks the rules of encapsulation and is a potentially serious bug.
That collection property should in fact be read-only. That is to say that the list itself is not read only but the property to obtain that list should only provide a getter.
The correct way to create the class and the list would be as follows:
public class Doodaa
{
private List<Wimwam> _wimwams = new List<Wimwam>();
public List<Wimwam> Wimwams{get{return _wimwams;}}
}
In this way, the class encapsulates the list in such a way that the reference to the list object cannot be changed. The contents of the list therefore remain under the ownership of the class.
1 comment:
Just a note to say that the HTML editor for this post has messed up the declaration of the list variable. It should obviously be a list of wimwams.
Post a Comment