Originally Published: 22 June 2003
On the whole, I was extremely pleased with C# Class Design. It has great organization, perfect length, and superb topic coverage. It is focused, in-depth, and challenging. This is a must buy and a must read for all serious C# developers. In fact, if I could mandate that all of my teammates read this book, I would do it in a heartbeat. Even those using other .NET languages could benefit from this book because many of the principles are not C#-specific, though some features discussed may not be available in other languages, such as VB.NET.
I would not, however, recommend this book to a beginning developer unless he or she has a good foundation in object-oriented design and other core software development principles. It is by no means a primer, but rather is targeted at the intermediate to advanced developer who wants to excel in designing robust, reusable, and extensible classes for the .NET framework. Nor is it for one who simply wants a set of instructions on how to build an application in C#; rather, it is for the developer who wants to build the best applications because he or she has the best understanding of the effects of class design in the .NET CLR.
On a more granular level, the table of contents provides a sufficient look at what each chapter covers, and each chapter delivers on what the TOC promsies, and more in some cases. Chapter One takes an in-depth look at reference and value types and, augmented by Chapter Three's discussion of method parameters, arms the developer with the knowledge needed to make the right choices between the two by providing a solid understanding of how they are handled by the CLR. Chapter Five is another essential read, covering object lifecycle and a few design patterns.
Most of the chapters offer practical advice on best practices in bulleted format to encapsulate some common-sense deductions from the data covered in the chapter. And there are a few gotchas that this book can help you avoid, such as how the compiler handles constants (you'll have to read it to find out).
There are only two things I'd criticize about this book. First, even though some of the topics covered are complex, I tend to think that it could have been considerably more readable in places, particularly Chapter Seven that deals with inheritance and polymorphism. Of course, part of the problem is that those topics cannot properly be covered in so short a space--they deserve (and have) book-length treatment. The second detraction is that Chapter Eight, while providing useful information, is somewhat off-topic, treating namespaces, assemblies, and documentation, which are only peripherally related to effective class design and are covered in several other books as well as the MSDN documentation.
In short, this book is definitely worth the $30 or so that it costs (lists at $39.99). It is not an easy read and should only be taken up by developers interested in knowing more than the minimum required to build an application. One of the things I love about this book is its focused approach and, consequently, its readable length of only 347 pages. Most books that are longer, that is most developer books, are full of too many code examples and too much re-coverage of topics that other books have already covered. This is a notable exception. I highly recommend it to intermediate to advanced developers.