Programming C# 4.0, Sixth Edition by Ian Griffiths, Matthew Adams, and Jesse Liberty
Total Page:16
File Type:pdf, Size:1020Kb
Programming C# 4.0 SIXTH EDITION Programming C# 4.0 Ian Griffiths, Matthew Adams, and Jesse Liberty Beijing • Cambridge • Farnham • Köln • Sebastopol • Taipei • Tokyo Programming C# 4.0, Sixth Edition by Ian Griffiths, Matthew Adams, and Jesse Liberty Copyright © 2010 Ian Griffiths and Matthew Adams. All rights reserved. Printed in the United States of America. Published by O’Reilly Media, Inc., 1005 Gravenstein Highway North, Sebastopol, CA 95472. O’Reilly books may be purchased for educational, business, or sales promotional use. Online editions are also available for most titles (http://my.safaribooksonline.com). For more information, contact our corporate/institutional sales department: 800-998-9938 or [email protected]. Editors: Mike Hendrickson and Laurel Ruma Indexer: Jay Marchand Production Editor: Adam Zaremba Cover Designer: Karen Montgomery Copyeditor: Audrey Doyle Interior Designer: David Futato Proofreader: Stacie Arellano Illustrator: Robert Romano Printing History: July 2001: First Edition. February 2002: Second Edition. May 2003: Third Edition. February 2005: Fourth Edition. December 2007: Fifth Edition. August 2010: Sixth Edition. Nutshell Handbook, the Nutshell Handbook logo, and the O’Reilly logo are registered trademarks of O’Reilly Media, Inc. Programming C# 4.0, the image of an African crowned crane, and related trade dress are trademarks of O’Reilly Media, Inc. Many of the designations used by manufacturers and sellers to distinguish their products are claimed as trademarks. Where those designations appear in this book, and O’Reilly Media, Inc. was aware of a trademark claim, the designations have been printed in caps or initial caps. While every precaution has been taken in the preparation of this book, the publisher and authors assume no responsibility for errors or omissions, or for damages resulting from the use of the information con- tained herein. ISBN: 978-0-596-15983-2 [M] 1280338225 Table of Contents Preface . xv 1. Introducing C# . ... ...................................................... 1 Why C#? Why .NET? 1 The .NET Framework Class Library 2 Language Style 3 Composability 4 Managed Code 5 Continuity and the Windows Ecosystem 6 C# 4.0, .NET 4, and Visual Studio 2010 7 Summary 9 2. Basic Programming Techniques . ...................................... 11 Getting Started 11 Namespaces and Types 14 Projects and Solutions 19 Comments, Regions, and Readability 24 Bad Comments 26 XML Documentation Comments 26 Variables 28 Variable Types 28 Expressions and Statements 35 Assignment Statements 38 Increment and Decrement Operators 38 Flow Control with Selection Statements 39 if Statements 40 switch and case Statements 45 Iteration Statements 47 foreach Statements 48 for Statements 50 while and do Statements 52 v Breaking Out of a Loop 53 Methods 55 Summary 58 3. Abstracting Ideas with Classes and Structs . ... ............................. 59 Divide and Conquer 59 Abstracting Ideas with Methods 59 Abstracting Ideas with Objects and Classes 62 Defining Classes 64 Representing State with Properties 64 Protection Levels 66 Initializing with a Constructor 68 Fields: A Place to Put Data 72 Fields Can Be Fickle, but const Is Forever 75 Read-only Fields and Properties 76 Related Constants with enum 79 Value Types and Reference Types 82 Too Many Constructors, Mr. Mozart 88 Overloading 88 Overloaded Methods and Default Named Parameters 89 Object Initializers 92 Defining Methods 95 Declaring Static Methods 98 Static Fields and Properties 99 Static Constructors 101 Summary 102 4. Extensibility and Polymorphism . ..................................... 103 Association Through Composition and Aggregation 104 Inheritance and Polymorphism 106 Replacing Methods in Derived Classes 109 Hiding Base Members with new 109 Replacing Methods with virtual and override 112 Inheritance and Protection 114 Calling Base Class Methods 116 Thus Far and No Farther: sealed 118 Requiring Overrides with abstract 121 All Types Are Derived from Object 127 Boxing and Unboxing Value Types 127 C# Does Not Support Multiple Inheritance of Implementation 132 C# Supports Multiple Inheritance of Interface 132 Deriving Interfaces from Other Interfaces 135 Explicit Interface Implementation 136 vi | Table of Contents The Last Resort: Checking Types at Runtime 141 Summary 142 5. Composability and Extensibility with Delegates . ... 143 Functional Composition with delegate 150 Generic Actions with Action<T> 156 Generic Predicates with Predicate<T> 160 Using Anonymous Methods 162 Creating Delegates with Lambda Expressions 163 Delegates in Properties 165 Generic Delegates for Functions 167 Notifying Clients with Events 171 Exposing Large Numbers of Events 180 Summary 183 6. Dealing with Errors . ................................................ 185 When and How to Fail 191 Returning Error Values 194 Debugging with Return Values 200 Exceptions 201 Handling Exceptions 207 When Do finally Blocks Run? 214 Deciding What to Catch 215 Custom Exceptions 218 Summary 220 7. Arrays and Lists . ................................................... 221 Arrays 221 Construction and Initialization 222 Custom Types in Arrays 225 Array Members 230 Array Size 236 List<T> 243 Custom Indexers 247 Finding and Sorting 253 Collections and Polymorphism 254 Creating Your Own IEnumerable<T> 258 Summary 264 8. LINQ . 265 Query Expressions 265 Query Expressions Versus Method Calls 267 Extension Methods and LINQ 268 Table of Contents | vii let Clauses 271 LINQ Concepts and Techniques 271 Delegates and Lambdas 271 Functional Style and Composition 273 Deferred Execution 274 LINQ Operators 275 Filtering 275 Ordering 276 Concatenation 279 Grouping 280 Projections 282 Zipping 288 Getting Selective 289 Testing the Whole Collection 291 Aggregation 292 Set Operations 294 Joining 295 Conversions 296 Summary 297 9. Collection Classes . .. ................................................. 299 Dictionaries 299 Common Dictionary Uses 301 IDictionary<TKey, TValue> 308 Dictionaries and LINQ 309 HashSet and SortedSet 310 Queues 311 Linked Lists 312 Stacks 313 Summary 314 10. Strings . 315 What Is a String? 316 The String and Char Types 317 Literal Strings and Chars 318 Escaping Special Characters 319 Formatting Data for Output 322 Standard Numeric Format Strings 323 Custom Numeric Format Strings 329 Dates and Times 332 Going the Other Way: Converting Strings to Other Types 336 Composite Formatting with String.Format 337 Culture Sensitivity 338 viii | Table of Contents Exploring Formatting Rules 340 Accessing Characters by Index 341 Strings Are Immutable 341 Getting a Range of Characters 343 Composing Strings 344 Splitting It Up Again 346 Upper- and Lowercase 347 Manipulating Text 348 Mutable Strings with StringBuilder 349 Finding and Replacing Content 353 All Sorts of “Empty” Strings 355 Trimming Whitespace 357 Checking Character Types 360 Encoding Characters 360 Why Encodings Matter 362 Encoding and Decoding 363 Why Represent Strings As Byte Sequences? 370 Summary 370 11. Files and Streams . .. ................................................. 371 Inspecting Directories and Files 371 Examining Directories 374 Manipulating File Paths 375 Path and the Current Working Directory 376 Examining File Information 377 Creating Temporary Files 381 Deleting Files 381 Well-Known Folders 383 Concatenating Path Elements Safely 387 Creating and Securing Directory Hierarchies 388 Deleting a Directory 394 Writing Text Files 396 Writing a Whole Text File at Once 396 Writing Text with a StreamWriter 397 When Files Go Bad: Dealing with Exceptions 400 Finding and Modifying Permissions 404 Reading Files into Memory 409 Streams 413 Moving Around in a Stream 419 Writing Data with Streams 421 Reading, Writing, and Locking Files 422 FileStream Constructors 423 Stream Buffers 423 Table of Contents | ix Setting Permissions During Construction 424 Setting Advanced Options 425 Asynchronous File Operations 425 Isolated Storage 428 Stores 429 Reading and Writing Text 430 Defining “Isolated” 431 Managing User Storage with Quotas 436 Managing Isolated Storage 436 Streams That Aren’t Files 439 An Adapting Stream: CryptoStream 443 In Memory Alone: The MemoryStream 444 Representing Binary As Text with Base64 Encoding 444 Summary 447 12. XML . ............................................................... 449 XML Basics (A Quick Review) 449 Elements 450 XHTML 451 X Stands for eXtensible 452 Creating XML Documents 452 XML Elements 455 XML Attributes 456 Putting the LINQ in LINQ to XML 459 Searching in XML with LINQ 461 Searching for a Single Node 465 Search Axes 466 Where Clauses 466 XML Serialization 467 Customizing XML Serialization Using Attributes 469 Summary 471 13. Networking . ......................................................... 473 Choosing a Networking Technology 473 Web Application with Client-Side Code 474 .NET Client and .NET Server 477 .NET Client and External Party Web Service 479 External Client and .NET Web Service 480 WCF 481 Creating a WCF Project 481 WCF Contracts 482 WCF Test Client and Host 483 Hosting a WCF Service 486 x | Table of Contents Writing a WCF Client 493 Bidirectional Communication with Duplex Contracts 501 HTTP 511 WebClient 512 WebRequest and WebResponse 516 Sockets 522 IP, IPv6, and TCP 523 Connecting to Services with the Socket Class 528 Implementing Services with the Socket Class 531 Other Networking Features 536 Summary 537 14. Databases . .......................................................... 539 The .NET Data Access Landscape 539 Classic ADO.NET 540 LINQ and Databases 544 Non-Microsoft