A Programmer's Guide to C
Total Page:16
File Type:pdf, Size:1020Kb
Download from Wow! eBook <www.wowebook.com> For your convenience Apress has placed some of the front matter material after the index. Please use the Bookmarks and Contents at a Glance links to access them. Contents at a Glance Preface ����������������������������������������������������������������������������������������������������������������������� xxv About the Author ����������������������������������������������������������������������������������������������������� xxvii About the Technical Reviewer ����������������������������������������������������������������������������������� xxix Acknowledgments ����������������������������������������������������������������������������������������������������� xxxi Introduction ������������������������������������������������������������������������������������������������������������� xxxiii ■■Chapter 1: C# and the .NET Runtime and Libraries �����������������������������������������������������1 ■■Chapter 2: C# QuickStart and Developing in C# ����������������������������������������������������������3 ■■Chapter 3: Classes 101 ����������������������������������������������������������������������������������������������11 ■■Chapter 4: Base Classes and Inheritance ������������������������������������������������������������������19 ■■Chapter 5: Exception Handling ����������������������������������������������������������������������������������33 ■■Chapter 6: Member Accessibility and Overloading ���������������������������������������������������47 ■■Chapter 7: Other Class Details �����������������������������������������������������������������������������������57 ■■Chapter 8: Structs (Value Types) �������������������������������������������������������������������������������77 ■■Chapter 9: Interfaces �������������������������������������������������������������������������������������������������83 ■■Chapter 10: Versioning and Aliases ���������������������������������������������������������������������������95 ■■Chapter 11: Statements and Flow of Execution �������������������������������������������������������101 ■■Chapter 12: Variable Scoping and Definite Assignment ������������������������������������������109 ■■Chapter 13: Operators and Expressions ������������������������������������������������������������������115 ■■Chapter 14: Conversions �����������������������������������������������������������������������������������������127 ■■Chapter 15: Arrays ��������������������������������������������������������������������������������������������������137 ■■Chapter 16: Properties ��������������������������������������������������������������������������������������������143 v ■ CONTENTS AT A GLANCE ■ Chapter 17: Generic Types ���������������������������������������������������������������������������������������153 ■ Chapter 18: Indexers, Enumerators, and Iterators ��������������������������������������������������165 ■ Chapter 19: Strings��������������������������������������������������������������������������������������������������177 ■ Chapter 20: Enumerations ���������������������������������������������������������������������������������������187 ■ Chapter 21: Attributes ���������������������������������������������������������������������������������������������195 ■ Chapter 22: Delegates, Anonymous Methods, and Lambdas �����������������������������������203 ■ Chapter 23: Events ��������������������������������������������������������������������������������������������������215 ■ Chapter 24: Dynamic Typing ������������������������������������������������������������������������������������223 ■ Chapter 25: User-Defined Conversions ��������������������������������������������������������������������227 ■ Chapter 26: Operator Overloading ���������������������������������������������������������������������������241 ■ Chapter 27: Nullable Types ��������������������������������������������������������������������������������������247 ■ Chapter 28: Linq to Objects �������������������������������������������������������������������������������������251 ■ Chapter 29: Linq to XML ������������������������������������������������������������������������������������������269 ■ Chapter 30: Linq to SQL �������������������������������������������������������������������������������������������283 ■ Chapter 31: Other Language Details ������������������������������������������������������������������������293 ■ Chapter 32: Making Friends with the �NET Framework �������������������������������������������305 ■ Chapter 33: System�Array and the Collection Classes ��������������������������������������������311 ■ Chapter 34: Threading ���������������������������������������������������������������������������������������������319 ■ Chapter 35: Asynchronous and Parallel Programming �������������������������������������������335 ■ Chapter 36: Execution-Time Code Generation ���������������������������������������������������������345 ■ Chapter 37: Interop ��������������������������������������������������������������������������������������������������351 ■ Chapter 38: �NET Base Class Library Overview �������������������������������������������������������361 ■ Chapter 39: Deeper into C# ��������������������������������������������������������������������������������������385 ■ Chapter 40: Logging and Debugging Techniques ����������������������������������������������������405 ■ Chapter 41: IDEs and Utilities ����������������������������������������������������������������������������������421 Index ���������������������������������������������������������������������������������������������������������������������������423 vi Introduction When I started on the first edition of this book, I got some very sage advice. “Write the book that you wish existed.” This is not a book to teach you how to write code, nor is it a detailed language specification. It is designed to explain both how C# works and why it works that way—the kind of book that a professional developer who is going to be writing C# code would want. Who This Book Is For This book is for software developers who want to understand why C# is designed the way it is and how to use it effectively. The content assumes familiarity with object-oriented programming concepts. How This Book Is Structured After a couple of introductory chapters, the book progresses from the simpler C# features to the more complex ones. You can read the chapters in order, working your way through the entire language. Or you can choose an individual chapter to understand the details of a specific feature. If you are new to C#, I suggest you start by reading the chapters on properties, generics, delegates and events, as well as the Linq chapters. These are the areas where C# is most different from other languages. If you are more interested in the details of the language syntax, you may find it useful to download the C# Language Reference from MSDN. Downloading the Code The code for the examples shown in this book is available on the Apress web site,www.apress.com . You can find a link on the book’s information page. Scroll down and click on the Source Code/Downloads tab. Contacting the Author One of the humbling parts of being an author is that despite the best efforts of the technical reviewer and copy editor, mistakes and poor explanations will show up in any book. If you have found such a mistake or have a comment, you can contact me at [email protected]. xxxiii CHAPTER 1 C# and the .NET Runtime and Libraries If you are reading this chapter, my guess is that you are interested in learning more about C#. Welcome. This book is primarily about the C# language, but before diving into the details, it is important to understand the basics of the environment in which C# code is written. The C# compiler will take C# programs and convert them into an intermediate language that can be executed only by the .NET Common Language Runtime (CLR). Languages that target a runtime are sometimes known as managed languages1 and are contrasted with unmanaged languages such as C++ that do not require a runtime2 and therefore run directly on the hardware.3 The .NET Runtime manages memory allocation, security, type safety, exception handling, and many other low-level concerns. There are several different variants of the .NET Runtime, running on everything from multiprocessor servers to smartphones to microcontrollers. To perform useful tasks, your C# code will be using code in the .NET Base Class Library (BCL). The BCL contains classes that are likely to be useful to many programs and includes support for the following: • Performing network operations • Performing I/O operations • Managing security • Globalizing programs4 • Manipulating text • Accessing a database • Manipulating XML • Interacting with event logging, tracing, and other diagnostic operations • Using unmanaged code • Creating and calling code dynamically 1Java is another managed language; it runs using the Java Virtual Machine (JVM), and Visual Basic is of course another language that runs on the CLR. 2Confusingly, C and C++ use the C Runtime, which is a collection of libraries and not a runtime like the .NET Runtime. 3Microsoft Visual C++ can be used as either a managed or unmanaged language (or both). 4Globalization helps developers write applications that can be used in different areas of the world. It helps the application support multiple languages, different date and number formats, and so on. 1 CHAPTER 1 ■ C# AND THE .NET RUNTIME AND LIBRARIES The BCL is big enough that it would be easy to