Foundations of Object-Oriented Programming Using .NET 2.0 Patterns