Brad Abrams was a founding member of the Common Language Runtime and .NET Framework teams at Microsoft Corporation. He has been designing parts of the .NET Framework since 1998 and is currently Group Program Manager of the .NET Framework team. Brad started his framework design career building the Base Class Library (BCL) that ships as a core part of the .NET Framework. Brad was also the lead editor on the Common Language Specification (CLS), the .NET Framework Design Guidelines, and the libraries in the ECMA\ISO CLI Standard. Brad has authored and coauthored multiple publications, including Programming in the .NET Environment and .NET Framework Standard Library Annotated Reference, Volumes 1 and 2. Brad graduated from North Carolina State University with a B.S. in computer science. You can find his most recent musings on his blog at http://blogs.msdn.com/BradA.
Krzysztof Cwalina is a program manager on the .NET Framework team at Microsoft. He was a founding member of the .NET Framework team and throughout his career has designed many .NET Framework APIs and framework development tools, such as FxCop. He is currently leading a companywide effort to develop, promote, and apply framework design and architectural guidelines to the .NET Framework. He is also leading the team responsible for delivering core .NET Framework APIs. Krzysztof graduated with a B.S. and an M.S. in computer science from the University of Iowa. You can find his blog at http://blogs.msdn.com/kcwalina.
Figures | p. xvii |
Tables | p. xix |
Foreword | p. xxi |
Foreword to the First Edition | p. xxiii |
Preface | p. xxv |
Acknowledgments | p. xxxi |
About the Authors | p. xxxiii |
About the Annotators | p. xxxv |
Introduction | p. 1 |
Qualities of a Well-Designed Framework | p. 3 |
Framework Design Fundamentals | p. 9 |
Progressive Frameworks | p. 11 |
Fundamental Principles of Framework Design | p. 14 |
Naming Guidelines | p. 37 |
Capitalization Conventions | p. 38 |
General Naming Conventions | p. 46 |
Names of Assemblies and DLLs | p. 54 |
Names of Namespaces | p. 56 |
Names of Classes, Structs, and Interfaces | p. 60 |
Names of Type Members | p. 68 |
Naming Parameters | p. 73 |
Naming Resources | p. 74 |
Type Design Guidelines | p. 77 |
Types and Namespaces | p. 79 |
Choosing Between Class and Struct | p. 84 |
Choosing Between Class and Interface | p. 88 |
Abstract Class Design | p. 95 |
Static Class Design | p. 97 |
Interface Design | p. 98 |
Struct Design | p. 101 |
Enum Design | p. 103 |
Nested Types | p. 115 |
Types and Assembly Metadata | p. 118 |
Member Design | p. 121 |
General Member Design Guidelines | p. 121 |
Property Design | p. 138 |
Constructor Design | p. 144 |
Event Design | p. 153 |
Field Design | p. 159 |
Extension Methods | p. 162 |
Operator Overloads | p. 168 |
Parameter Design | p. 175 |
Designing for Extensibility | p. 193 |
Extensibility Mechanisms | p. 193 |
Base Classes | p. 206 |
Sealing | p. 207 |
Exceptions | p. 211 |
Exception Throwing | p. 216 |
Choosing the Right Type of Exception to Throw | p. 221 |
Using Standard Exception Types | p. 234 |
Designing Custom Exceptions | p. 239 |
Exceptions and Performance | p. 240 |
Usage Guidelines | p. 245 |
Arrays | p. 245 |
Attributes | p. 247 |
Collections | p. 250 |
DateTime and DateTimeOffset | p. 261 |
ICloneable | p. 263 |
IComparable and IEquatable | p. 264 |
IDisposable | p. 266 |
Nullable | p. 266 |
Object | p. 268 |
Serialization | p. 274 |
Uri | p. 283 |
System.Xml Usage | p. 284 |
Equality Operators | p. 286 |
Common Design Patterns | p. 289 |
Aggregate Components | p. 289 |
Table of Contents provided by Publisher. All Rights Reserved. |
The New copy of this book will include any supplemental materials advertised. Please check the title of the book to determine if it should include any access cards, study guides, lab manuals, CDs, etc.
The Used, Rental and eBook copies of this book are not guaranteed to include any supplemental materials. Typically, only the book itself is included. This is true even if the title states it includes any access cards, study guides, lab manuals, CDs, etc.