Developers are accustomed to thinking of an object as either existing or not, but the truth is the initialization process is complex enough that this isn't always so.
Learn how to initialize objects properly and avoid small missteps that can lead to big problems when creating and initializing objects.
You can't predict change, but you can prepare for it. Learn how to avoid cases where you need to remove work and rework too much of what you've already done.
Your code is the expression of your design intent -- make sure you communicate
It requires a lot of plumbing to create, manage, and communicate with background threads. The System.ComponentModel.BackgroundWorker class already contains the functionality you need to follow best practices.
Multithreaded programming is difficult because context switches can happen any time. Here are a few techniques to mitigate the chance of failure.
You already know what those new features in C# 3.0 are doing because you do these same things in C# 2.0. Learn how C# 3.0 can reduce coding lines and improve readability by walking through a reverse migration.
Thrown exceptions break the normal flow of execution in a program to report error conditions. A few simple techniques can help you preserve execution flow and give users and administrators the information they need to understand what went wrong.
Generics can solve many more problems than collections. Use generics to write code once and reuse it more easily.
Learn how to scope your variables correctly, as well as the rules governing definite assignment in C#.
- By Eric Gunnerson and Nick Wienholt