Genius Boy here just spent ten minutes debugging a class because I used the private field directly inside the class, instead of the property accessor method.
Here's what the property looked like:
public string FileSpec
{
get { return _fileSpec; }
}
private string _fileSpec;
Notice there's no set method. The file spec is set only in the constructor, and is immutable at runtime. That means that throughout the class I had code like this:
if (File.Exists(_fileSpec))
{
_cache.Load(_fileSpec);
}
The problem? Well, the private data could contain any number of tokens representing disk or remote folders, which wasn't a requirement when the class was first built.
The solution? C# 2.0 gives you the power to create an accessors of different visibilities, like this:
public string FileSpec
{
get { return _fileSpec; }
private set
{
_fileSpec = DeTokenize(value);
}
}
The constructor now looks like this:
public MyClass(string fileSpec)
{
FileSpec = fileSpec;
}
And then the code that uses the value can do this:
if (File.Exists(FileSpec))
{
_cache.Load(FileSpec);
}
All better.