HAPPY BOOKSGIVING
Use code BOOKSGIVING during checkout to save 40%-55% on books and eBooks. Shop now.
Register your product to gain access to bonus material or receive a coupon.
This eBook includes the following formats, accessible from your Account page after purchase:
EPUB The open industry format known for its reflowable content and usability on supported mobile devices.
PDF The popular standard, used most often with the free Acrobat® Reader® software.
This eBook requires no passwords or activation to read. We customize your eBook by discreetly watermarking it with your name, making it uniquely yours.
Real Solutions for C# 4.0 Programmers
Need fast, robust, efficient code solutions for Microsoft C# 4.0? This book delivers exactly what you’re looking for. You’ll find more than 200 solutions, best-practice techniques, and tested code samples for everything from classes to exceptions, networking to XML, LINQ to Silverlight. Completely up-to-date, this book fully reflects major language enhancements introduced with the new C# 4.0 and .NET 4.0. When time is of the essence, turn here first: Get answers you can trust and code you can use, right now!
Beginning with the language essentials and moving on to solving common problems using the .NET Framework, C# 4.0 How-To addresses a wide range of general programming problems and algorithms. Along the way is clear, concise coverage of a broad spectrum of C# techniques that will help developers of all levels become more proficient with C# and the most popular .NET tools.
Fast, Reliable, and Easy to Use!
C# 4.0 How-To: Creating Versatile Types
Download the sample pages (includes Chapter 2 and Index)
Introduction 1
Overview of C# 4.0 How-To 1
How-To Benefit from This Book 1
How-To Continue Expanding Your Knowledge 3
PART I: C# FUNDAMENTALS
Chapter 1 Type Fundamentals 7
Create a Class 8
Define Fields, Properties, and Methods 9
Define Static Members 10
Add a Constructor 11
Initialize Properties at Construction 12
Use const and readonly 13
Reuse Code in Multiple Constructors 14
Derive from a Class 14
Call a Base Class Constructor 15
Override a Base Class’s Method or Property 16
Create an Interface 19
Implement Interfaces 19
Create a Struct 21
Create an Anonymous Type 22
Prevent Instantiation with an Abstract Base Class 23
Interface or Abstract Base Class? 24
Chapter 2 Creating Versatile Types 27
Format a Type with ToString() 28
Make Types Equatable. 32
Make Types Hashable with GetHashCode() 34
Make Types Sortable 34
Give Types an Index 36
Notify Clients when Changes Happen 38
Overload Appropriate Operators 39
Convert One Type to Another 40
Prevent Inheritance 41
Allow Value Type to Be Null 42
Chapter 3 General Coding 45
Declare Variables 46
Defer Type Checking to Runtime (Dynamic Types) 47
Use Dynamic Typing to Simplify COM Interop 49
Declare Arrays 50
Create Multidimensional Arrays 50
Alias a Namespace 51
Use the Conditional Operator (?:) 52
Use the Null-Coalescing Operator (??) 53
Add Methods to Existing Types with Extension Methods 54
Call Methods with Default Parameters 55
Call Methods with Named Parameters 56
Defer Evaluation of a Value Until Referenced 57
Enforce Code Contracts 58
Chapter 4 Exceptions 63
Throw an Exception 64
Catch an Exception 64
Catch Multiple Exceptions 65
Rethrow an Exception 66
(Almost) Guarantee Execution with finally 67
Get Useful Information from an Exception 68
Create Your Own Exception Class 70
Catch Unhandled Exceptions 72
Usage Guidelines 76
Chapter 5 Numbers 77
Decide Between Float, Double, and Decimal 78
Use Enormous Integers (BigInteger) 79
Use Complex Numbers 80
Format Numbers in a String 82
Convert a String to a Number 86
Convert Between Number Bases 87
Convert a Number to Bytes (and Vice Versa) 89
Determine if an Integer Is Even 91
Determine if an Integer Is a Power of 2 (aka, A Single Bit Is Set) 91
Determine if a Number Is Prime 91
Count the Number of 1 Bits 92
Convert Degrees and Radians 93
Round Numbers 93
Generate Better Random Numbers 96
Generate Unique IDs (GUIDs) 97
Chapter 6 Enumerations 99
Declare an Enumeration 100
Declare Flags as an Enumeration 101
Determine if a Flag Is Set 102
Convert an Enumeration to an Integer (and Vice Versa) 102
Determine if an Enumeration Is Valid 103
List Enumeration Values 103
Convert a String to an Enumeration 103
Attach Metadata to Enums with Extension Methods 104
Enumeration Tips 106
Chapter 7 Strings 109
Convert a String to Bytes (and Vice Versa) 110
Create a Custom Encoding Scheme 111
Compare Strings Correctly 115
Change Case Correctly 116
Detect Empty Strings 117
Concatenate Strings: Should You Use StringBuilder? 117
Concatenate Collection Items into a String 119
Append a Newline Character 120
Split a String 121
Convert Binary Data to a String (Base-64 Encoding) 122
Reverse Words 124
Sort Number Strings Naturally 125
Chapter 8 Regular Expressions 131
Search Text 132
Extract Groups of Text 132
Replace Text 133
Match and Validate 134
Help Regular Expressions Perform Better 137
Chapter 9 Generics 139
Create a Generic List 140
Create a Generic Method 141
Create a Generic Interface 142
Create a Generic Class 143
Create a Generic Delegate 145
Use Multiple Generic Types. 146
Constrain the Generic Type 146
Convert IEnumerable<string> to IEnumerable<object> (Covariance) 149
Convert IComparer<Child> to IComparer<Parent> (Contravariance) 150
Create Tuples (Pairs and More) 151
PART II: HANDLING DATA
Chapter 10 Collections 155
Pick the Correct Collection Class 156
Initialize a Collection 157
Iterate over a Collection Independently of Its Implementation 158
Create a Custom Collection 159
Create Custom Iterators for a Collection 163
Reverse an Array 166
Reverse a Linked List 167
Get the Unique Elements from a Collection 168
Count the Number of Times an Item Appears 168
Implement a Priority Queue 169
Create a Trie (Prefix Tree) 173
Chapter 11 Files and Serialization 177
Create, Read, and Write Files 178
Delete a File 180
Combine Streams (Compress a File) 181
Get a File Size 183
Get File Security Description 183
Check for File and Directory Existence 185
Enumerate Drives 185
Enumerate Directories and Files 186
Browse for Directories 187
Search for a File or Directory 188
Manipulate File Paths 190
Create Unique or Temporary Filenames 192
Watch for File System Changes 192
Get the Paths to My Documents, My Pictures, Etc. 194
Serialize Objects 194
Serialize to an In-Memory Stream 198
Store Data when Your App Has Restricted Permissions 198
Chapter 12 Networking and the Web 201
Resolve a Hostname to an IP Address 202
Get This Machine’s Hostname and IP Address 202
Ping a Machine 203
Get Network Card Information 204
Create a TCP/IP Client and Server 204
Send an Email via SMTP 208
Download Web Content via HTTP 209
Upload a File with FTP 213
Strip HTML of Tags 214
Embed a Web Browser in Your Application 214
Consume an RSS Feed 216
Produce an RSS Feed Dynamically in IIS 220
Communicate Between Processes on the Same Machine (WCF) 222
Communicate Between Two Machines on the Same Network (WCF) 229
Communicate over the Internet (WCF) 231
Discover Services During Runtime (WCF) 233
Chapter 13 Databases 237
Create a New Database from Visual Studio 238
Connect and Retrieve Data 240
Insert Data into a Database Table 245
Delete Data from a Table 246
Run a Stored Procedure 247
Use Transactions 248
Bind Data to a Control Using a DataSet 250
Detect if Database Connection Is Available 258
Automatically Map Data to Objects with the Entity Framework 259
Chapter 14 XML 261
Serialize an Object to and from XML 262
Write XML from Scratch 266
Read an XML File 268
Validate an XML Document 270
Query XML Using XPath 271
Transform Database Data to XML 273
Transform XML to HTML 274
PART III: USER INTERACTION
Chapter 15 Delegates, Events, and Anonymous Methods 279
Decide Which Method to Call at Runtime 280
Subscribe to an Event 282
Publish an Event 283
Ensure UI Updates Occur on UI Thread 285
Assign an Anonymous Method to a Delegate 288
Use Anonymous Methods as Quick-and-Easy Event Handlers 288
Take Advantage of Contravariance 291
Chapter 16 Windows Forms 295
Create Modal and Modeless Forms 296
Add a Menu Bar 297
Disable Menu Items Dynamically 300
Add a Status Bar 300
Add a Toolbar 301
Create a Split Window Interface 302
Inherit a Form 304
Create a User Control 308
Use a Timer 313
Use Application and User Configuration Values 314
Use ListView Efficiently in Virtual Mode 317
Take Advantage of Horizontal Wheel Tilt 319
Cut and Paste 323
Automatically Ensure You Reset the Wait Cursor 327
Chapter 17 Graphics with Windows Forms and GDI+ 329
Understand Colors 330
Use the System Color Picker 330
Convert Colors Between RGB to HSV 331
Draw Shapes 335
Create Pens. 337
Create Custom Brushes 339
Use Transformations 341
Draw Text 344
Draw Text Diagonally 344
Draw Images 344
Draw Transparent Images 345
Draw to an Off-Screen Buffer 346
Access a Bitmap’s Pixels Directly for Performance 347
Draw with Anti-Aliasing 348
Draw Flicker-Free 349
Resize an Image 350
Create a Thumbnail of an Image 351
Take a Multiscreen Capture 352
Get the Distance from the Mouse Cursor to a Point 354
Determine if a Point Is Inside a Rectangle 355
Determine if a Point Is Inside a Circle 355
Determine if a Point Is Inside an Ellipse 356
Determine if Two Rectangles Intersect. 357
Print and Print Preview 358
Chapter 18 WPF 365
Show a Window 366
Choose a Layout Method 367
Add a Menu Bar 367
Add a Status Bar 369
Add a Toolbar 369
Use Standard Commands 370
Use Custom Commands 371
Enable and Disable Commands 374
Expand and Collapse a Group of Controls 375
Respond to Events 376
Separate Look from Functionality 377
Use Triggers to Change Styles at Runtime 378
Bind Control Properties to Another Object 379
Format Values During Data Binding 383
Convert Values to a Different Type During Data Binding 383
Bind to a Collection 385
Specify How Bound Data Is Displayed 385
Define the Look of Controls with Templates 386
Animate Element Properties 388
Render 3D Geometry 389
Put Video on a 3D Surface 392
Put Interactive Controls onto a 3D Surface 395
Use WPF in a WinForms App 398
Use WinForms in a WPF Application 400
Chapter 19 ASP.NET 401
View Debug and Trace Information 402
Determine Web Browser Capabilities 404
Redirect to Another Page 405
Use Forms Authentication for User Login 406
Use Master Pages for a Consistent Look 409
Add a Menu 411
Bind Data to a GridView 412
Create a User Control 414
Create a Flexible UI with Web Parts 418
Create a Simple AJAX Page 423
Do Data Validation 425
Maintain Application State 429
Maintain UI State 430
Maintain User Data in a Session 431
Store Session State 433
Use Cookies to Restore Session State 434
Use ASP.NET Model-View-Controller (MVC) 436
Chapter 20 Silverlight 443
Create a Silverlight Project 444
Play a Video 445
Build a Download and Playback Progress Bar 449
Response to Timer Events on the UI Thread 451
Put Content into a 3D Perspective 452
Make Your Application Run out of the Browser 453
Capture a Webcam 455
Print a Document 457
PART IV: ADVANCED C#
Chapter 21 LINQ 461
Query an Object Collection 462
Order the Results 463
Filter a Collection 464
Get a Collection of a Portion of Objects (Projection) 465
Perform a Join 465
Query XML 466
Create XML 467
Query the Entity Framework 467
Query a Web Service (LINQ to Bing) 469
Speed Up Queries with PLINQ (Parallel LINQ) 472
Chapter 22 Memory Management 473
Measure Memory Usage of Your Application 474
Clean Up Unmanaged Resources Using Finalization 475
Clean Up Managed Resources Using the Dispose Pattern 477
Force a Garbage Collection 482
Create a Cache That Still Allows Garbage Collection 482
Use Pointers 485
Speed Up Array Access 486
Prevent Memory from Being Moved 487
Allocate Unmanaged Memory 488
Chapter 23 Threads, Asynchronous, and Parallel Programming 491
Easily Split Work Among Processors 492
Use Data Structures in Multiple Threads 495
Call a Method Asynchronously 496
Use the Thread Pool 497
Create a Thread 498
Exchange Data with a Thread 499
Protect Data Used in Multiple Threads 500
Use Interlocked Methods Instead of Locks 503
Protect Data in Multiple Processes 504
Limit Applications to a Single Instance 505
Limit the Number of Threads That Can Access a Resource 506
Signal Threads with Events 509
Use a Multithreaded Timer 512
Use a Reader-Writer Lock 513
Use the Asynchronous Programming Model 515
Chapter 24 Reflection and Creating Plugins 519
Enumerate Types in an Assembly 520
Add a Custom Attribute 521
Instantiate a Class Dynamically 523
Invoke a Method on a Dynamically Instantiated Class 523
Implement a Plugin Architecture 525
Chapter 25 Application Patterns and Tips 529
Use a Stopwatch to Profile Your Code 530
Mark Obsolete Code 531
Combine Multiple Events into a Single Event 532
Implement an Observer (aka Subscriber) Pattern 536
Use an Event Broker 540
Remember the Screen Location 543
Implement Undo Using Command Objects 545
Use Model-View-ViewModel in WPF 552
Understand Localization 562
Localize a Windows Forms Application 563
Localize an ASP.NET Application 564
Localize a WPF Application 565
Localize a Silverlight Application 570
Deploy Applications Using ClickOnce 572
Chapter 26 Interacting with the OS and Hardware 575
Get OS, Service Pack, and CLR Version 576
Get CPU and Other Hardware Information 576
Invoke UAC to Request Admin Privileges 578
Write to the Event Log 581
Access the Registry 583
Manage Windows Services 584
Create a Windows Service 585
Call Native Windows Functions Using P/Invoke 588
Call C Functions in a DLL from C# 589
Use Memory-Mapped Files 590
Ensure Your Application Works in Both 32-bit and 64-bit Environments 591
Respond to System Configuration Changes 593
Take Advantage of Windows 7 Features 593
Retrieve Power State Information 595
Chapter 27 Fun Stuff and Loose Ends 597
Create a Nonrectangular Window 598
Create a Notification Icon 602
Create a Screen Saver in WPF 605
Show a Splash Screen 614
Play a Sound File 619
Shuffle Cards 620
Appendix Essential Tools 621
Reflector 622
NUnit 623
NDepend 626
FXCop 626
Virtual PC 627
Process Explorer and Process Monitor 628
RegexBuddy 630
LINQPad 630
Where to Find More Tools 631
Index 633