Organizing object-oriented code in C#