Table of contents : Part I: Fundamentals Chapter 1: Flexible Code Using Polymorphism Recap of Polymorphism Initial Program Demonstration 1 Output Analysis Better Program Demonstration 2 Analysis Useful Notes Summary Chapter 2: Abstract Class or Interface? Recap of Abstract Classes and Interfaces Initial Program Demonstration 1 Better Program Demonstration 2 Output Analysis Summary Chapter 3: Wise Use of Code Comments Recap of Code Comments Initial Program Demonstration 1 Output Analysis Better Program Demonstration 2 Analysis Use the Power of C# Demonstration 3 Analysis Summary Part II: Important Principles Chapter 4: Know SOLID Principles Single Responsibility Principle Initial Program Better Program Open/Closed Principle Initial Program Better Program Liskov Substitution Principle Initial Program Better Program Analysis Interface Segregation Principle Initial Program Better Program Dependency Inversion Principle Initial Program Better Program Summary Chapter 5: Use the DRY Principle Reasons for DRY Initial Program Demonstration 1 Output Analysis Better Program Demonstration 2 Output Analysis Further Improvement Demonstration 3 Output Demonstration 4 Output Summary Part III: Make Efficient Applications Chapter 6: Separate Changeable Code Using Factories The Problem Statement Initial Program Demonstration 1 Output Analysis Better Program Demonstration 2 Output Analysis A New Requirement Demonstration 3 Output Analysis Demonstration 4 Output Summary Chapter 7: Add Features Using Wrappers The Problem Statement Initial Program (Using Subclassing) Demonstration 1 Better Program (Using Object Composition) Class Diagram Demonstration 2 Output Analysis Summary Chapter 8: Make Efficient Templates Using Hooks The Problem Statement Initial Program Class Diagram Demonstration 1 Output Analysis Enhanced Requirement Demonstration 2 Output Summary Chapter 9: Simplify Complex Systems Using Facades The Problem Statement Initial Program Demonstration 1 Output Analysis Better Program Class Diagram Demonstration 2 Output Analysis Summary Part IV: Handling Surprises in a Better Way Chapter 10: Organizing Exceptions Recap of Exceptions Case 1: Handling Different Exceptions in the Same Way Initial Program Better Program Case 2: Handling the Same Exception in Different Ways Initial Program Better Program Summary Chapter 11: Special Attention to the Null Values Initial Program Demonstration 1 Output Analysis Better Programs Demonstration 2 Output Analysis Demonstration 3 Analysis Summary Part V: The Road Ahead Chapter 12: Memory Management Overview Stack Memory vs. Heap Memory Q&A Session The Garbage Collector in Action Different Phases of Garbage Collection Different Cases of Invoking the Garbage Collector Demonstration 1 Output Analysis Q&A Session Disposing of an Object Finalize vs. Dispose Demonstration 2 Output Analysis Q&A Session Summary Chapter 13: Analyzing Memory Leaks Managed vs. Unmanaged Memory Leaks Memory Leak Analysis Demonstration Snapshots from Diagnostic Tools Summary Chapter 14: More Tips Learn Design Patterns Brief History of Design Patterns The Good News Q&A Session Avoid Anti-patterns Brief History of Anti-patterns Examples of Anti-patterns Q&A Session Final Suggestions Decide Between a Static Method and an Instance Method Know the Common Terminology Accept Failures! Q&A Session Summary Appendix A: Winning Notes Appendix B: Resources Index