This afternoon, I was building a new class. I had a handful of data items I knew I needed, so I made fields for them, and then began constructing properties to encapsulate the fields. This is a well-known best practice, of course, because it lets you protect your internal representation of this data, and to therefore insulate consumers of your class from any changes in this underlying data.
Needless to say, setting up a property get…set block is slightly more time-consuming than just creating a field and being done with it. Along comes the Visual Studio C# refactoring tools to help encourage the proper behavior. Just right-click on your field, choose “Refactor….” –> “Encapsulate Field”, and you can create the getter and setter in one swift action.
Except that this dialog takes longer to load (at least on this client’s system) than it would take to type out the damned block to begin with. Thanks for the gesture, though.
In this case, the problem seems to be that the tool is solving a larger problem than I’ve got right now. It’s able to seek out existing code that’s already referencing this field and repair the effects of any name changes you make.
Ok, that’s cool. But I don’t need that right now. This is a brand-new class — there are no references to these fields yet. But someone might need this, and I concede the fact that if I found myself needing functionality like this, I’d scream just as loudly if it was taken away from me.
So is there a better solution? I think so — two, in fact, in this case, or maybe even three.
The first improvement I’d consider is to not spend time hooking up the “search all references” stuff unless I said I needed it.
In my case, though, there’s an even better solution. The fields I was trying to encapsulate were already marked “private”, which means that they can’t be referenced outside the current class. That should simplify matters considerably.
Oh, and the third improvement, for extra credit, would be to multi-thread this dialog so I can run the simple functionality even if the advanced stuff is still loading.
Usability is everywhere.