Jesse knows exactly what the object oriented newbie is going to ask, and lets you know exactly what is happening. He knows what will confuse you (me), and clarifies IMMEDIATELY. Having this kind of foresight makes it possible to read this book cover to cover without jumping back to re-learn something that was explained poorly in the first place. The layout in this book is top-shelf.
As C# is completely dependent on the .NET Base Class Libraries, any text on the matter is incomplete without examples of and references to Windows and Web Forms. This book covers Windows Forms, Web forms, Web Services and ADO.NET. (The ADO.NET section is OUTSTANDING)
(If you are ever in doubt about an O'Reilly book, they have the table of contents listed for every item at their site)
I have yet to find a more efficient and easy to read text. Every time I think O'Reilly can't do any better, they come up with something like this.
Your money is well spent here.
The second part introduces how to use the language to create .net programs. This is a bit superficial, but his goal was only to provide an introduction, and it is a very good introduction. For more detail on really building advanced applications you will need an additional book (like his book on ASP.NET).
The third part of Programming C# goes into advanced topics you won't easily find elsewhere, with excellent coverage of (for example) threading, remoting, reflection, streams and so forth.
Liberty writes well, his examples are terrific, and he makes complex material easily understandable. Further, he supports his book on his web site where he provides not only source code but a discussion center where you can ask questions.
I highly recommend this excellent tutorial.
Teaching effectively requires a deep understanding of the material, so what is important is emphasized at the expense of the trivial. In this book, everything is given equal importance, so the important material is lost in the trivial.
The text is frequently written "out of order", that is, statements are made, and then a later statement includes something you needed to understand the previous one. This is evident in the line by line code samples, where the author frequently describes line 3 of the code, and then says "but before we do that, we need to do line 2". This is confusing and not helpful.
While on the subject of the code samples, the samples frequently include a lot of useless code that just confuses the point. I ended up stripping the samples to the basics myself, and in virtually every case I ended up with a 50% or more reduction in lines of code, and a much clearer sample. Even worse, the samples could be done in much better ways, so in addition to being confusing they teach bad usage of the language.
The main problem with the samples is that many of them are taken directly from the SDK. The SDK samples are not designed to teach programming, they are designed to demonstrate how to solve a specific problem. This makes them inappropriate for teaching a language. The ones on ADO, for example, contain complex table joins, which are SQL constructs and have nothing to do with ADO or C#. The reflection API samples includes one where it writes IL directly, certainly not something that most programmers are going to do. And the text never explains the IL that is written.
I own dozens of O'Reilly books, and most are excellent. Unfortunately this one and UML In A Nutshell are the exceptions.