Beginning C# 3.0 by Jack Purdum