C# 4.0 How-To

C# 4.0 How-To

by Ben Watson


View All Available Formats & Editions

Product Details

ISBN-13: 9780672330636
Publisher: Sams
Publication date: 03/15/2010
Series: How-To Series
Pages: 653
Product dimensions: 5.90(w) x 8.90(h) x 1.40(d)

About the Author

Ben Watson, a software engineer on Microsoft’s Bing team, helps design and implement massively scalable distributed systems and other internals for the Bing search engine. Before joining Microsoft he served as a lead developer for GeoEye, a top provider of satellite imagery. He blogs at PhilosophicalGeek.com, where he has presented many popular coding tutorials in C# and C++.

Table of Contents

Introduction 1

Overview of C# 4.0 How-To 1

How-To Benefit from This Book 1

How-To Continue Expanding Your Knowledge 3


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&#lt;string> to IEnumerable (Covariance) 149

Convert IComparer&#lt;Child> to IComparer

(Contravariance) 150

Create Tuples (Pairs and More) 151


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

Serialize an Object to and from


Read an

Validate an


Transform Database Data to



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


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 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

Customer Reviews

Most Helpful Customer Reviews

See All Customer Reviews

C# 4.0 How-To 4 out of 5 based on 0 ratings. 2 reviews.
Anonymous More than 1 year ago
Anonymous More than 1 year ago