An excellent book is Head First Design Patterns. Easy to understand and follow and a fun read.
The GoF book is where it all started, but I found it very dry and difficult to grasp. Not what I would recommend for learning.
Examples are in Java, but the concepts translate well.
You can even get C# examples.