Christian Nagel, Bill Evjen, Jay Glynn, Karli Watson, Morgan Skinner
Wrox
Programmer to Programmer™
Join the discussion @ p2p.wrox.com
Professional
C# 4 and .NET 4
l
Related Wrox Books
Beginning ASP.NET 4: in C# and VB
ISBN: 9780470502211
This introductory book offers helpful examples and step-by-step format and has code examples written in both C# and Visual Basic. With this book you will gradually build a Web site example that takes you through the processes of building basic ASP.NET Web pages, adding features with pre-built server controls, designing consistent pages, displaying data, and more.
Beginning Microsoft Visual Basic 2010
ISBN: 9780470502228
This book not only shows you how to write Windows applications, Web applications with ASP.NET, and Windows mobile and embedded CE apps with Visual Basic 2010, but you’ll also get a thorough grounding in the basic nuts-and-bolts of writing good code. You’ll be exposed to the very latest VB tools and techniques with coverage of both the Visual Studio 2010 and .NET 4 releases.
Beginning Microsoft Visual C# 2010
ISBN: 9780470502266
Using this book, You will first cover the fundamentals such as variables, flow control, and object-oriented programming and gradually build your skills for Web and Windows programming, Windows forms, and data access. Step-by-step directions walk you through processes and invite you to “Try it Out,” at every stage. By the end, you’ll be able to write useful programming code following the steps you’ve learned in this thorough, practical book. If you’ve always wanted to master Visual C# programming, this book is the perfect one-stop resource.
Professional ASP.NET 4: in C# and VB
ISBN: 9780470502204
Written by three highly recognized and regarded ASP.NET experts, this book provides all-encompassing coverage on ASP.NET 4 and offers a unique approach of featuring examples in both C# and VB, as is the incomparable coverage of core ASP.NET. After a fast-paced refresher on essentials such as server controls, the book delves into expert coverage of all the latest capabilities of ASP.NET 4. You’ll learn site navigation, personalization, membership, role management, security, and more.
Professional Visual Basic 2010 and .NET 4
ISBN: 9780470502242
If you’ve already covered the basics and want to dive deep into VB and .NET topics that professional programmers use most, this is your guide. You’ll explore all the new features of Visual Basic 2010 as well as all the essential functions that you need, including .NET features such as LINQ to SQL, LINQ to XML, WCF, and more. Plus, you’ll examine exception handling and debugging, Visual Studio features, and ASP.NET web programming.
Visual Basic 2010 Programmer’s Reference
ISBN: 9780470499832
Visual Basic 2010s Programmer’s Reference is a language tutorial and a reference guide to the 2010 release of Visual Basic. The tutorial provides basic material suitable for beginners but also includes in-depth content for more advanced developers.
Professional Visual Studio 2010
ISBN: 9780470548653
Written by an author team of veteran programmers and developers, this book gets you quickly up to speed on what you can expect from Visual Studio 2010. Packed with helpful examples, this comprehensive guide examines the features of Visual Studio 2010, and walks you through every facet of the Integrated Development Environment (IDE), from common tasks and functions to its powerful tools.
WPF Programmer’s Reference: Windows Presentation Foundation with C# 2010 and .NET 4
ISBN: 9780470477229
Written by a leading expert on Microsoft graphics programming, this richly illustrated book provides an introduction to WPF development and explains fundamental WPF concepts.
Professional
C# 4 and .neT 4
inTroduCTion . . . li
ParT i:
⊲
The C# language
ChaPTer 1:
.NET Architecture . . . 3
ChaPTer 2:
Core C# . . . 23
ChaPTer 3:
Objects and Types . . . 65
ChaPTer 4:
Inheritance. . . 89
ChaPTer 5:
Generics . . . 107
ChaPTer 6:
Arrays and Tuples . . . 129
ChaPTer 7:
Operators and Casts . . . .151
ChaPTer 8:
Delegates, Lambdas, and Events . . . 183
ChaPTer 9:
Strings and Regular Expressions. . . 207
ChaPTer 10:
Collections . . . .225
ChaPTer 11:
Language Integrated Query . . . 267
ChaPTer 12:
Dynamic Language Extensions . . . .295
ChaPTer 13:
Memory Management and Pointers . . . 307
ChaPTer 14:
Reflection . . .
333
ChaPTer 15:Errors and Exceptions . . . 351
o
ChaPTer 16:Visual Studio 2010 . . .
373
ChaPTer 17:Deployment . ...
. . . 407
n
ChaPTer 18:Assemblies . . . 431
ChaPTer 19:
Instrumentation . . . . . . 461
ChaPTer 20:
Threads, Tasks, and Synchronization . . . 491
ChaPTer 21:
Security . . . .545
ChaPTer 22:
Localization . . . .569
ChaPTer 23:
System.Transactions . . . .605
ChaPTer 24:
Networking . . . 637
ChaPTer 25:
Windows Services . . . 667
ChaPTer 26:
Interop . . . .695
ChaPTer 27:
Core XAML . . . 727
ChaPTer 28:
Managed Extensibility Framework . . . 747
ChaPTer 29:
Manipulating Files and the Registry . ...
. . . 771
ParT iV: daTa
⊲
ChaPTer 30:Core ADO.NET . . . 817
ChaPTer 31:
ADO.NET Entity Framework . . . 861
ChaPTer 32:
Data Services . . . .885
ChaPTer 33:
Manipulating XML . . . .903
ChaPTer 34:
.NET Programming with SQL Server . . . .955
ParT V: PresenTaTion
⊲
ChaPTer 35:Core WPF . . .
983
ChaPTer 36:Business Applications with WPF . . . 1035
ChaPTer 37:
Creating Documents with WPF . . . 1075
ChaPTer 38:
Silverlight . . . 1095
ChaPTer 39:
Windows Forms . . . 1117
ChaPTer 40:
Core ASP.NET . . . 1149
ChaPTer 41:
ASP.NET Features . . . 1185
ChaPTer 42:
ASP.NET Dynamic Data and MVC . . . 1243
ParT Vi: CommuniCaTion
⊲
ChaPTer 43:Windows Communication Foundation . . . 1279
ChaPTer 44:
Windows Workflow Foundation 4 . . . 1309
ChaPTer 45:
Peer-to-Peer Networking . . . 1339
aPPendiX:
Guidelines for Windows 7 and Windows Server 2008 R2 . . . 1397
indeX . . . .1417
online ChaPTers
⊲
ChaPTer 48:
Graphics with GDI+ . . . .OC1
ChaPTer 49:
Visual Studio Tools for Office . . . OC49
ChaPTer 50:
Managed Add-In Framework . . . OC77
ChaPTer 51:
Enterprise Services . . . OC97
ChaPTer 52:
Directory Services . . . OC123
ChaPTer 53:
C#, Visual Basic, C++/CLI, and F# . . . OC157
ChaPTer 54:
.NET Remoting . . . .OC191
ChaPTer 55:
Web Services with ASP.NET . . . OC233
ChaPTer 56:
LINQ to SQL . . . .OC255
Professional
C# 4 and .neT 4
Professional C# 4 and .neT 4
Published by Wiley Publishing, Inc. 10475 Crosspoint Boulevard Indianapolis, IN 46256 www.wiley.com
Copyright © 2010 by Wiley Publishing, Inc., Indianapolis, Indiana
Published simultaneously in Canada
ISBN: 978-0-470-50225-9
Manufactured in the United States of America
10 9 8 7 6 5 4 3 2 1
No part of this publication may be reproduced, stored in a retrieval system or transmitted in any form or by any means, electronic, mechanical, photocopying, recording, scanning or otherwise, except as permitted under Sections 107 or 108 of the 1976 United States Copyright Act, without either the prior written permission of the Publisher, or authorization through payment of the appropriate per-copy fee to the Copyright Clearance Center, 222 Rosewood Drive, Danvers, MA 01923, (978) 750-8400, fax (978) 646-8600. Requests to the Publisher for permission should be addressed to the Permissions Department, John Wiley & Sons, Inc., 111 River Street, Hoboken, NJ 07030, (201) 748-6011,
fax (201) 748-6008, or online at http://www.wiley.com/go/permissions.
Limit of Liability/Disclaimer of Warranty: The publisher and the author make no representations or warranties with respect to the accuracy or completeness of the contents of this work and specifically disclaim all warranties, including without limitation warranties of fitness for a particular purpose. No warranty may be created or extended by sales or promotional materials. The advice and strategies contained herein may not be suitable for every situation. This work is sold with the understanding that the publisher is not engaged in rendering legal, accounting, or other professional services. If professional assistance is required, the services of a competent professional person should be sought. Neither the publisher nor the author shall be liable for damages arising herefrom. The fact that an organization or Web site is referred to in this work as a citation and/or a potential source of further information does not mean that the author or the publisher endorses the information the organization or Web site may provide or recommendations it may make. Further, readers should be aware that Internet Web sites listed in this work may have changed or disappeared between when this work was written and when it is read.
For general information on our other products and services please contact our Customer Care Department within the United States at (877) 762-2974, outside the United States at (317) 572-3993 or fax (317) 572-4002.
Wiley also publishes its books in a variety of electronic formats. Some content that appears in print may not be available in electronic books.
Library of Congress Control Number: 2009942439
To my two girls, Angela and Stephanie
The first half of the year 2009 was the hardest time in
my life — a trip through hell and back. I cannot thank
Angela enough for all her love and support she gave to
me. Without her I couldn’t have made it through that.
Stephanie was born shortly after medical treatment
and was the biggest motivation during that time.
I love you both!
—
Christian Nagel
To Tuija, always.
—
Bill Evjen
For donna
—
Karli Watson
Dedicated to my parents, Joan & Donald Skinner.
There are many things that I’d like to say to my Mum
and Dad, but I’m in the privileged position of not
needing to say anything to them. They were both
wonderful people, are greatly missed, and the world
was made a sweeter place by their being in it. Thanks
Mum, thanks Dad, you were brilliant.
abouT The auThors
ChrisTian nagel is a Microsoft Regional Director and Microsoft MVP, an associate of thinktecture, and owner of CN innovation. He is a software architect and developer who offers training and consulting on how to develop Microsoft .NET solutions. He looks back on more than 25 years of software development experience. Christian started his computing career with PDP 11 and VAX/ VMS systems, covering a variety of languages and platforms. Since 2000, when .NET was just a technology preview, he has been working with various .NET technologies to build numerous .NET solutions. With his profound knowledge of Microsoft technologies, he has written numerous .NET books, and is certified as a Microsoft Certified Trainer and Professional Developer. Christian speaks at international conferences such as TechEd and Tech Days, and started INETA Europe to support .NET user groups. You can contact Christian via his web sites, www.cninnovation.com and www.thinktecture.com, and follow his tweets on www.twitter.com/christiannagel.
bill eVjen is an active proponent of .NET technologies and community-based learning initiatives for .NET. He has been actively involved with .NET since the first bits were released in 2000. In the same year, Bill founded the St. Louis .NET User Group (www.stlnet.org), one of the world’s first such groups. Bill is also the founder and former executive director of the International .NET Association (www.ineta.org), which represents more than 500,000 members worldwide.
Based in St. Louis, Missouri, Bill is an acclaimed author and speaker on ASP.NET and Web Services. He has authored or coauthored more than 20 books including Professional ASP.NET 4, Professional VB 2008, ASP.NET Professional Secrets, XML Web Services for ASP.NET, and Web Services Enhancements: Understanding the WSE for Enterprise Applications (all published by Wiley). In addition to writing, Bill is a speaker at numerous conferences, including DevConnections, VSLive, and TechEd. Along with these activities, Bill works closely with Microsoft as a Microsoft Regional Director and an MVP.
Bill is the Global Head of Platform Architecture for Thomson Reuters, Lipper, the international news and financial services company (www.thomsonreuters.com). He graduated from Western Washington University in Bellingham, Washington, with a Russian language degree. When he isn’t tinkering on the computer, he can usually be found at his summer house in Toivakka, Finland. You can reach Bill on Twitter at @billevjen.
Karli WaTson is consultant at Infusion Development (www.infusion.com), a technology architect at Boost.net (www.boost.net), and a freelance IT specialist, author, and developer. For the most part, he immerses himself in .NET (in particular C# and lately WPF) and has written numerous books in the field. He specializes in communicating complex ideas in a way that is accessible to anyone with a passion to learn, and spends much of his time playing with new technology to find new things to teach people about.
During those (seemingly few) times where he isn’t doing the above, Karli will probably be wishing he was hurtling down a mountain on a snowboard. Or possibly trying to get his novel published. Either way, you’ll know him by his brightly colored clothes. You can also find him tweeting online at www.twitter.com/karlequin, and maybe one day he’ll get round to making himself a web site.
morgan sKinner began his computing career at a young age on the Sinclair ZX80 at school, where he was underwhelmed by some code a teacher had written and so began programming in assembly language. Since then he’s used all sorts of languages and platforms, including VAX Macro Assembler, Pascal, Modula2, Smalltalk, X86 assembly language, PowerBuilder, C/C++, VB, and currently C# (of course). He’s been programming in .NET since the PDC release in 2000, and liked it so much he joined Microsoft in 2001. He now works in premier support for developers and spends most of his time assisting customers with C#. You can reach Morgan at www.morganskinner.com.
abouT The TeChniCal ediTors
aleXei gorKoV is the chief software engineer at EPAM Systems (www.epam.com), a leading software development outsourcing company in Central and Eastern Europe. He has worked with .NET since 2004 and as a front-end developer involved in development of web portals and line-of-business web applications using Microsoft technologies. Over the past four years, he has edited more than a dozen programming books from Wiley Publishing on ASP.NET, Ajax, JavaScript, CSS and XML. He lives in Saratov, Russia.
miTChel sellers is the CEO of IowaComputerGurus Inc. His extensive experience in software
development has lead to a focus on proper architecture, performance, stability, and overall cost effectiveness of delivered solutions. He is the author of Professional DotNetNuke Module Programming and many technical articles, and is currently working on his next book, Visual Studio 2010 and .NET 4 Six-in-One, scheduled for publication by Wiley in early 2010. He is a regular speaker at user groups and conferences.
aCquisiTions ediTor
Paul Reese
ProjeCT ediTor
Sara Shlaer
deVeloPmenT ediTor
Susan Cohen
TeChniCal ediTors
Alexei Gorkov Mitchel Sellers
ProduCTion ediTor
Kathleen Wisor
CoPy ediTors
Tricia Liebig
Foxxe Editorial Services
ediTorial direCTor
Robyn B. Siesky
ediTorial manager
Mary Beth Wakefield
marKeTing manager
David Mayhew
ProduCTion manager
Tim Tate
ViCe PresidenT and eXeCuTiVe grouP Publisher
Richard Swadley
ViCe PresidenT and eXeCuTiVe Publisher
Barry Pruett
assoCiaTe Publisher
Jim Minatel
ProjeCT CoordinaTor, CoVer
Lynsey Stanford
Proofreader
Word One New York
indeXer
Robert Swanson
CoVer designer
Michael E. Trent
CoVer image
aCKnoWledgmenTs
ThanKs To all aT Wiley for your patience when I started working later on the book than I had expected and planned. Special thanks to Sara Shlaer who was of great support with the time pressure and the change of the Wrox style. Similar to the authors, she worked many weekends to get the book out on time.
Many thanks!
—Christian Nagel
ThanKs To sara shlaer, Paul Reese, and Jim Minatel for the opportunity to work on such a great book, and to the technical editors, Alexei Gorkov and Mitchel Sellers, for their excellent work. In addition to my co-authors, I would like to thank my family for putting up with all the writing. Thank you Tuija, Sofia, Henri, and Kalle!
—Bill Evjen
i Would liKe To ThanK Sara Shlaer, Paul Reese, and the rest of the team at Wrox for all the help they provided. I would also like to thank my wife and son for putting up with the nights and weekends lost to the computer. They are my inspiration.
—Jay Glynn
ThanKs To all aT Wiley for their support and assistance on this project, as well as their understanding and flexibility in dealing with an author who never seems to have enough time to write. Special thanks to Sara Shlaer — one of the best and friendliest editors I’ve had the pleasure to work with. Also, thanks to friends, family, and work colleagues for understanding why I haven’t had time for much socializing lately, and to donna, as always, for all her support and for putting up with all the late nights.
ConTenTs
INTRODUCTION
LI
ParT i: The C# language
ChaPTer 1: .neT arChiTeCTure
3
The relationship of C# to .neT
3
The Common language runtime
4
Platform Independence
4
Performance Improvement
4
Language Interoperability
5
a Closer look at intermediate language
6
Support for Object Orientation and Interfaces
7
Distinct Value and Reference Types
8
Strong Data Typing
8
Error Handling with Exceptions
13
Use of Attributes
13
assemblies
14
Private Assemblies
14
Shared Assemblies
15
Reflection
15
Parallel Programming
15
.neT framework Classes
16
namespaces
17
Creating .neT applications Using C#
17
Creating ASP.NET Applications
17
Creating Windows Forms
19
Using the Windows Presentation Foundation (WPF)
19
Windows Controls
19
Windows Services
20
Windows Communication Foundation
20
Windows Workflow Foundation
20
The role of C# in the .neT enterprise architecture
20
ConTenTs
ChaPTer 2: Core C#
23
Your first C# Program
23
The Code
24
Compiling and Running the Program
24
A Closer Look
25
Variables
26
Initialization of Variables
27
Type Inference
28
Variable Scope
29
Constants
31
Predefined Data Types
31
Value Types and Reference Types
31
CTS Types
33
Predefined Value Types
33
Predefined Reference Types
35
flow Control
37
Conditional Statements
37
Loops
40
Jump Statements
43
enumerations
44
namespaces
45
The using Directive
46
Namespace Aliases
47
The Main() Method
48
Multiple Main() Methods
48
Passing Arguments to Main()
49
More on Compiling C# files
50
Console i/o
51
Using Comments
53
Internal Comments within the Source Files
53
XML Documentation
53
The C# Preprocessor Directives
55
#define and #undef
55
#if, #elif, #else, and #endif
56
#warning and #error
57
#region and #endregion
57
#line
57
#pragma
58
C# Programming Guidelines
58
Rules for Identifiers
58
Usage Conventions
59
XVii
ConTenTs
ChaPTer 3: objeCTs and TyPes
65
Classes and structs
65
Classes
66
Data Members
66
Function Members
67
readonly Fields
78
anonymous Types
79
structs
80
Structs Are Value Types
81
Structs and Inheritance
82
Constructors for Structs
82
Partial Classes
82
static Classes
84
The object Class
84
System.Object Methods
84
The ToString() Method
85
extension Methods
86
summary
87
ChaPTer 4: inheriTanCe
89
Types of inheritance
89
Implementation Versus Interface Inheritance
89
Multiple Inheritance
90
Structs and Classes
90
implementation inheritance
90
Virtual Methods
91
Hiding Methods
92
Calling Base Versions of Functions
93
Abstract Classes and Functions
93
Sealed Classes and Methods
94
Constructors of Derived Classes
94
Modifiers
99
Visibility Modifiers
99
Other Modifiers
99
interfaces
100
Defining and Implementing Interfaces
101
Derived Interfaces
104
ConTenTs
ChaPTer 5: generiCs
107
Generics overview
107
Performance
108
Type Safety
109
Binary Code Reuse
109
Code Bloat
109
Naming Guidelines
110
Creating Generic Classes
110
Generics features
113
Default Values
114
Constraints
114
Inheritance
117
Static Members
117
Generic interfaces
118
Covariance and Contra-variance
118
Covariance with Generic Interfaces
119
Contra-Variance with Generic Interfaces
120
Generic structs
121
Generic Methods
123
Generic Methods Example
124
Generic Methods with Constraints
125
Generic Methods with Delegates
126
Generic Methods Specialization
126
summary
128
ChaPTer 6: arrays and TuPles
129
simple arrays
129
Array Declaration
129
Array Initialization
130
Accessing Array Elements
130
Using Reference Types
131
Multidimensional arrays
132
Jagged arrays
133
array Class
134
Creating Arrays
134
Copying Arrays
135
Sorting
136
arrays as Parameters
139
Array Covariance
139
ArraySegment<T>
140
XiX
ConTenTs
IEnumerator Interface
141
foreach Statement
141
yield Statement
142
Tuples
146
structural Comparison
147
summary
149
ChaPTer 7: oPeraTors and CasTs
151
operators
151
Operator Shortcuts
153
Operator Precedence
157
Type safety
157
Type Conversions
158
Boxing and Unboxing
161
Comparing objects for equality
162
Comparing Reference Types for Equality
162
Comparing Value Types for Equality
163
operator overloading
163
How Operators Work
164
Operator Overloading Example: The Vector Struct
165
Which Operators Can You Overload?
171
User-Defined Casts
172
Implementing User-Defined Casts
173
Multiple Casting
179
summary
182
ChaPTer 8: delegaTes, lambdas, and eVenTs
183
Delegates
183
Declaring Delegates
184
Using Delegates
185
Simple Delegate Example
188
Action<T> and Func<T> Delegates
190
BubbleSorter Example
190
Multicast Delegates
193
Anonymous Methods
196
lambda expressions
197
Parameters
198
Multiple Code Lines
198
Variables Outside of the Lambda Expression
199
ConTenTs
Event Publisher
200
Event Listener
202
Weak Events
203
summary
205
ChaPTer 9: sTrings and regular eXPressions
207
examining system.string
208
Building Strings
209
StringBuilder Members
211
Format Strings
212
regular expressions
217
Introduction to Regular Expressions
218
The RegularExpressionsPlayaround Example
219
Displaying Results
221
Matches, Groups, and Captures
223
summary
224
ChaPTer 10: ColleCTions
225
Collection interfaces and Types
225
lists
226
Creating Lists
228
Read-Only Collections
236
Queue
236
stack
240
linked list
241
sorted list
246
Dictionaries
248
Key Type
248
Dictionary Example
250
Lookup
253
Sorted Dictionary
254
sets
255
observable Collection
256
Bit arrays
258
BitArray
258
BitVector32
260
Concurrent Collections
262
Performance
264
XXi
ConTenTs
ChaPTer 11: language inTegraTed query
267
linQ overview
267
Lists and Entities
267
LINQ Query
271
Extension Methods
272
Deferred Query Execution
273
standard Query operators
275
Filtering
277
Filtering with Index
277
Type Filtering
278
Compound from
278
Sorting
279
Grouping
280
Grouping with Nested Objects
281
Join
282
Set Operations
283
Zip
284
Partitioning
285
Aggregate Operators
286
Conversion
287
Generation Operators
288
Parallel linQ
289
Parallel Queries
289
Partitioners
290
Cancellation
290
expression Trees
291
linQ Providers
293
summary
294
ChaPTer 12: dynamiC language eXTensions
295
Dynamic language runtime
295
The Dynamic Type
296
Dynamic Behind the Scenes
297
Hosting the Dlr scriptruntime
300
Dynamicobject and expandoobject
302
DynamicObject
302
ExpandoObject
304
ConTenTs
ChaPTer 13: memory managemenT and PoinTers
307
Memory Management Under the Hood
307
Value Data Types
308
Reference Data Types
309
Garbage Collection
311
freeing Unmanaged resources
312
Destructors
313
The IDisposable Interface
314
Implementing IDisposable and a Destructor
315
Unsafe Code
317
Accessing Memory Directly with Pointers
317
Pointer Example: PointerPlayground
325
Using Pointers to Optimize Performance
329
summary
332
ChaPTer 14: refleCTion
333
Custom attributes
334
Writing Custom Attributes
334
Custom Attribute Example: WhatsNewAttributes
337
Using reflection
340
The System.Type Class
340
The TypeView Example
342
The Assembly Class
344
Completing the WhatsNewAttributes Example
345
summary
349
ChaPTer 15: errors and eXCePTions
351
exception Classes
352
Catching exceptions
353
Implementing Multiple Catch Blocks
355
Catching Exceptions from Other Code
359
System.Exception Properties
359
What Happens If an Exception Isn’t Handled?
360
Nested try Blocks
360
User-Defined exception Classes
362
Catching the User-Defined Exceptions
363
Throwing the User-Defined Exceptions
364
Defining the User-Defined Exception Classes
367
XXiii
ConTenTs
ParT ii: Visual sTudio
ChaPTer 16: Visual sTudio 2010
373
Working with Visual studio 2010
373
Creating a Project
378
Distinguishing Projects from Solutions
383
Windows Application Code
386
Exploring and Coding a Project
386
Building a Project
394
Debugging Your Code
398
refactoring Tools
401
Multi-Targeting the .neT framework
403
WPf, WCf, Wf, and More
404
Building WPF Applications in Visual Studio 2010
404
Building WF Applications in Visual Studio 2010
405
summary
406
ChaPTer 17: dePloymenT
407
Planning for Deployment
407
Deployment Options
408
Deployment Requirements
408
Deploying the .NET Runtime
409
simple Deployment options
409
Xcopy Deployment
410
Xcopy and Web Applications
411
Publishing a Web Site
411
Visual studio 2010 setup and Deployment Projects
412
What is Windows Installer?
412
Creating Installers
413
Clickonce
419
ClickOnce Operation
419
Publishing a ClickOnce Application
420
ClickOnce Settings
420
Application Cache for ClickOnce Files
421
Application Security
421
Visual studio 2010 editors
422
File System Editor
422
Registry Editor
422
File Types Editor
423
ConTenTs
Custom Actions Editor
424
Launch Conditions Editor
426
summary
427
ParT iii: foundaTion
ChaPTer 18: assemblies
431
What are assemblies?
431
Assembly Features
432
Assembly Structure
432
Assembly Manifests
433
Namespaces, Assemblies, and Components
434
Private and Shared Assemblies
434
Satellite Assemblies
434
Viewing Assemblies
434
Creating assemblies
435
Creating Modules and Assemblies
435
Assembly Attributes
436
Creating and Loading Assemblies Dynamically
438
application Domains
441
shared assemblies
445
Strong Names
445
Integrity Using Strong Names
446
Global Assembly Cache
446
Creating a Shared Assembly
447
Create a Strong Name
447
Installing the Shared Assembly
448
Using the Shared Assembly
448
Delayed Signing of Assemblies
449
References
450
Native Image Generator
451
Configuring .neT applications
452
Configuration Categories
452
Binding to Assemblies
453
Versioning
454
Version Numbers
455
Getting the Version Programmatically
455
Binding to Assembly Versions
456
Publisher Policy Files
457
Runtime Version
458
XXV
ConTenTs
ChaPTer 19: insTrumenTaTion
461
Code Contracts
461
Preconditions
463
Postconditions
464
Invariants
465
Contracts for Interfaces
465
Tracing
467
Trace Sources
468
Trace Switches
469
Trace Listeners
470
Filters
471
Correlation
472
event logging
475
Event-Logging Architecture
476
Event-Logging Classes
477
Creating an Event Source
478
Writing Event Logs
479
Resource Files
479
Performance Monitoring
483
Performance-Monitoring Classes
483
Performance Counter Builder
484
Adding PerformanceCounter Components
486
perfmon.exe
488
summary
489
ChaPTer 20: Threads, TasKs, and synChronizaTion
491
overview
492
asynchronous Delegates
492
Polling
493
Wait Handle
493
Asynchronous Callback
494
The Thread Class
495
Passing Data to Threads
496
Background Threads
497
Thread Priority
498
Controlling Threads
499
Thread Pools
499
Tasks
501
Starting Tasks
501
ConTenTs
Task Hierarchies
502
Results from Tasks
503
Parallel Class
504
Looping with the Parallel.For Method
504
Looping with the Parallel.ForEach Method
506
Invoking Multiple Methods with the Parallel.Invoke Method
507
Cancellation framework
507
Cancellation of Parallel.For
507
Cancellation of Tasks
509
Threading issues
510
Race Condition
510
Deadlock
513
synchronization
514
lock Statement and Thread Safety
515
Interlocked
520
Monitor
521
SpinLock
522
WaitHandle
522
Mutex
523
Semaphore
524
Events
526
Barrier
529
ReaderWriterLockSlim
530
Timers
533
event-Based asynchronous Pattern
534
BackgroundWorker
535
Creating an Event-Based Asynchronous Component
539
summary
543
ChaPTer 21: seCuriTy
545
authentication and authorization
545
Identity and Principal
545
Roles
547
Declarative Role-Based Security
547
Client Application Services
548
encryption
552
Signature
554
Key Exchange and Secure Transfer
556
access Control to resources
558
Code access security
561
XXVii
ConTenTs
Permissions
562
Distributing Code Using Certificates
567
summary
568
ChaPTer 22: loCalizaTion
569
namespace system.Globalization
569
Unicode Issues
570
Cultures and Regions
570
Cultures in Action
574
Sorting
578
resources
579
Creating Resource Files
579
Resource File Generator
579
ResourceWriter
580
Using Resource Files
581
The System.Resources Namespace
584
Windows forms localization Using Visual studio
584
Changing the Culture Programmatically
588
Using Custom Resource Messages
590
Automatic Fallback for Resources
590
Outsourcing Translations
591
localization with asP.neT
591
localization with WPf
593
.NET Resources with WPF
594
XAML Resource Dictionaries
594
a Custom resource reader
598
Creating a DatabaseResourceReader
598
Creating a DatabaseResourceSet
600
Creating a DatabaseResourceManager
600
Client Application for DatabaseResourceReader
601
Creating Custom Cultures
601
summary
603
ChaPTer 23: sysTem.TransaCTions
605
overview
605
Transaction Phases
606
ACID Properties
607
Database and entity Classes
607
Traditional Transactions
609
ConTenTs
System.EnterpriseServices
610
system.Transactions
611
Committable Transactions
612
Transaction Promotion
614
Dependent Transactions
616
Ambient Transactions
618
isolation level
624
Custom resource Managers
626
Transactional Resources
627
Transactions with Windows 7 and Windows server 2008
632
summary
635
ChaPTer 24: neTWorKing
637
The WebClient Class
638
Downloading Files
638
Basic WebClient Example
638
Uploading Files
639
Webrequest and Webresponse Classes
640
Authentication
642
Working with Proxies
642
Asynchronous Page Requests
642
Displaying output as an HTMl Page
643
Allowing Simple Web Browsing from Your Applications
643
Launching Internet Explorer Instances
645
Giving Your Application More IE-Type Features
645
Printing Using the WebBrowser Control
651
Displaying the Code of a Requested Page
651
The WebRequest and WebResponse Classes Hierarchy
652
Utility Classes
653
URIs
653
IP Addresses and DNS Names
654
lower-level Protocols
656
Using SmtpClient
657
Using the TCP Classes
658
The TcpSend and TcpReceive Examples
658
TCP Versus UDP
660
The UDP Class
661
The Socket Class
661
XXiX
ConTenTs
ChaPTer 25: WindoWs serViCes
667
What is a Windows service?
667
Windows services architecture
668
Service Program
668
Service Control Program
670
Service Configuration Program
670
Classes for Windows Services
670
Creating a Windows service Program
670
Creating Core Functionality for the Service
671
QuoteClient Example
673
Windows Service Program
675
Threading and Services
679
Service Installation
679
Installation Program
679
Monitoring and Controlling Windows services
683
MMC Snap-in
683
net.exe Utility
684
sc.exe Utility
684
Visual Studio Server Explorer
684
Writing a Custom Service Controller
684
Troubleshooting and event logging
692
summary
693
ChaPTer 26: inTeroP
695
.neT and CoM
695
Metadata
696
Freeing Memory
696
Interfaces
697
Method Binding
698
Data Types
698
Registration
698
Threading
699
Error Handling
700
Events
701
Marshaling
701
Using a CoM Component from a .neT Client
702
Creating a COM Component
702
Creating a Runtime Callable Wrapper
707
Using the RCW
708
ConTenTs
Threading Issues
710
Adding Connection Points
710
Using a .neT Component from a CoM Client
712
COM Callable Wrapper
713
Creating a .NET Component
713
Creating a Type Library
714
COM Interop Attributes
716
COM Registration
718
Creating a COM Client Application
718
Adding Connection Points
720
Creating a Client with a Sink Object
721
Platform invoke
722
summary
726
ChaPTer 27: Core Xaml
727
overview
727
Elements Map to .NET Objects
728
Using Custom .NET Classes
729
Properties as Attributes
730
Properties as Elements
731
Essential .NET Types
731
Collections
731
Constructors
732
Dependency Properties
732
Creating a Dependency Property
733
Coerce Value Callback
734
Value Changed Callbacks and Events
735
Bubbling and Tunneling events
736
attached Properties
739
Markup extensions
741
Creating Custom Markup Extensions
742
XAML-Defined Markup Extensions
744
reading and Writing XaMl
744
summary
745
ChaPTer 28: managed eXTensibiliTy frameWorK
747
Mef architecture
747
Contracts
754
exports
755
XXXi
ConTenTs
Exporting Metadata
760
imports
762
Lazy Loading of Parts
764
Containers and export Providers
765
Catalogs
767
summary
769
ChaPTer 29: maniPulaTing files and The regisTry
771
Managing the file system
771
.NET Classes That Represent Files and Folders
772
The Path Class
775
A FileProperties Sample
775
Moving, Copying, and Deleting files
780
FilePropertiesAndMovement Sample
780
Looking at the Code for FilePropertiesAndMovement
781
reading and Writing to files
784
Reading a File
784
Writing to a File
786
Streams
787
Buffered Streams
788
Reading and Writing to Binary Files Using FileStream
789
Reading and Writing to Text Files
793
Mapped Memory files
799
reading Drive information
800
file security
802
Reading ACLs from a File
802
Reading ACLs from a Directory
803
Adding and Removing ACLs from a File
805
reading and Writing to the registry
806
The Registry
806
The .NET Registry Classes
808
reading and Writing to isolated storage
810
summary
814
ParT iV: daTa
ChaPTer 30: Core ado.neT
817
aDo.neT overview
817
Namespaces
818
ConTenTs
Database-Specific Classes
819
Using Database Connections
820
Managing Connection Strings
821
Using Connections Efficiently
822
Transactions
824
Commands
825
Executing Commands
826
Calling Stored Procedures
829
fast Data access: The Data reader
832
Managing Data and relationships: The Dataset Class
835
Data Tables
835
Data Relationships
840
Data Constraints
842
XMl schemas: Generating Code with XsD
844
Populating a Dataset
850
Populating a DataSet Class with a Data Adapter
850
Populating a DataSet from XML
851
Persisting Dataset Changes
852
Updating with Data Adapters
852
Writing XML Output
854
Working with aDo.neT
855
Tiered Development
855
Key Generation with SQL Server
857
Naming Conventions
859
summary
860
ChaPTer 31: ado.neT enTiTy frameWorK
861
overview of the aDo.neT entity framework
861
entity framework Mapping
862
Logical Layer
863
Conceptual Layer
864
Mapping Layer
865
entity Client
866
Connection String
867
Entity SQL
867
entities
868
object Context
871
relationships
873
Table per Hierarchy
873
Table per Type
874
XXXiii
ConTenTs
object Query
876
Updates
879
Object Tracking
880
Change Information
881
Attaching and Detaching Entities
882
Storing Entity Changes
882
linQ to entities
883
summary
884
ChaPTer 32: daTa serViCes
885
overview
885
Custom Hosting with Clr objects
886
CLR Objects
886
Data Model
888
Data Service
889
Hosting the Service
889
Additional Service Operations
890
HTTP Client application
891
Queries with Urls
893
Using WCf Data services with the aDo.neT entity framework
894
ASP.NET Hosting and EDM
894
.NET Applications Using System.Data.Service.Client
895
summary
902
ChaPTer 33: maniPulaTing Xml
903
XMl standards support in .neT
904
introducing the system.Xml namespace
904
Using system.Xml Classes
905
reading and Writing streamed XMl
906
Using the XmlReader Class
906
Validating with XmlReader
910
Using the XmlWriter Class
911
Using the DoM in .neT
913
Using the XmlDocument Class
914
Using XPathnavigators
917
The System.Xml.XPath Namespace
917
The System.Xml.Xsl Namespace
922
XMl and aDo.neT
927
Converting ADO.NET Data to XML
927
ConTenTs
serializing objects in XMl
934
Serialization without Source Code Access
940
linQ to XMl and .neT
942
Working with Different XMl objects
943
XDocument
943
XElement
944
XNamespace
945
XComment
946
XAttribute
947
Using linQ to Query XMl Documents
948
Querying Static XML Documents
948
Querying Dynamic XML Documents
949
More Query Techniques for XMl Documents
951
Reading from an XML Document
951
Writing to an XML Document
952
summary
953
ChaPTer 34: .neT Programming WiTh sql serVer
955
.neT runtime Host
956
Microsoft.sqlserver.server
957
User-Defined Types
958
Creating UDTs
958
Using UDTs with SQL Server
963
Using UDTs from Client-Side Code
963
User-Defined aggregates
964
Creating User-Defined Aggregates
965
Using User-Defined Aggregates
966
stored Procedures
967
Creating Stored Procedures
967
Using Stored Procedures
968
User-Defined functions
969
Creating User-Defined Functions
969
Using User-Defined Functions
970
Triggers
970
Creating Triggers Example
970
Using Triggers
972
XMl Data Type
972
Tables with XML Data
972
Reading XML Values
973
Query the Data
976
XXXV
ConTenTs
XML Indexes
978
Strongly Typed XML
979
summary
980
ParT V: PresenTaTion
ChaPTer 35: Core WPf
983
overview
983
Namespaces
984
Class Hierarchy
985
shapes
986
Geometry
988
Transformation
990
Brushes
991
SolidColorBrush
991
LinearGradientBrush
991
RadialGradientBrush
992
DrawingBrush
992
ImageBrush
993
VisualBrush
993
Controls
994
Simple Controls
994
Content Controls
995
Headered Content Controls
996
Items Controls
998
Headered Items Controls
998
Decoration
998
layout
999
StackPanel
999
WrapPanel
1000
Canvas
1000
DockPanel
1001
Grid
1001
styles and resources
1003
Styles
1003
Resources
1004
System Resources
1005
Accessing Resources from Code
1006
Dynamic Resources
1006
Resource Dictionaries
1007
ConTenTs
Property Triggers
1008
MultiTrigger
1010
Data Triggers
1010
Templates
1011
Control Templates
1012
Data Templates
1014
Styling a ListBox
1016
ItemTemplate
1017
Control Templates for ListBox Elements
1018
animations
1020
Timeline
1020
Non-Linear Animations
1023
Event Triggers
1023
Keyframe Animations
1025
Visual state Manager
1026
3-D
1029
Model
1030
Cameras
1032
Lights
1032
Rotation
1032
summary
1033
ChaPTer 36: business aPPliCaTions WiTh WPf
1035
Data Binding
1035
BooksDemo Application
1036
Binding with XAML
1037
Simple Object Binding
1040
Change Notification
1041
Object Data Provider
1043
List Binding
1045
Master Details Binding
1048
MultiBinding
1048
Priority Binding
1049
Value Conversion
1051
Adding List Items Dynamically
1053
Data Template Selector
1053
Binding to XML
1055
Binding Validation
1057
Commanding
1061
Defining Commands
1062
XXXVii
ConTenTs
Command Bindings
1063
TreeView
1063
DataGrid
1067
Custom Columns
1069
Row Details
1070
Grouping with the DataGrid
1070
summary
1073
ChaPTer 37: CreaTing doCumenTs WiTh WPf
1075
Text elements
1075
Fonts
1075
TextEffect
1077
Inline
1078
Block
1080
Lists
1081
Tables
1082
Anchor to Blocks
1083
flow Documents
1085
fixed Documents
1086
XPs Documents
1089
Printing
1091
Printing with the PrintDialog
1091
Printing Visuals
1092
summary
1094
ChaPTer 38: silVerlighT
1095
Comparing WPf and silverlight
1095
Creating a silverlight Project
1097
navigation
1097
networking
1102
Creating an ADO.NET Entity Data Model
1102
Creating a WCF Service for Silverlight Clients
1103
Calling WCF Services
1104
Using WCF Data Services
1107
Using System.Net to Access the Service
1109
Browser integration
1110
Calling out to JavaScript
1111
JavaScript Calling Silverlight
1112
silverlight out-of-Browser applications
1113
ConTenTs
ChaPTer 39: WindoWs forms
1117
Creating a Windows forms application
1117
Class Hierarchy
1122
Control Class
1122
Size and Location
1123
Appearance
1123
User Interaction
1124
Windows Functionality
1125
Miscellaneous Functionality
1125
standard Controls and Components
1125
Button
1125
CheckBox
1126
RadioButton
1126
ComboBox, ListBox, and CheckedListBox
1127
The DataGridView Control
1128
DateTimePicker
1135
ErrorProvider
1135
ImageList
1136
Label
1136
ListView
1136
PictureBox
1136
ProgressBar
1137
TextBox, RichTextBox, and MaskedTextBox
1137
Panel
1138
FlowLayoutPanel and TableLayoutPanel
1138
SplitContainer
1139
TabControl and TabPages
1139
ToolStrip
1140
MenuStrip
1141
ContextMenuStrip
1141
ToolStripMenuItem
1141
ToolStripManager
1141
ToolStripContainer
1142
forms
1142
Form Class
1142
Multiple Document Interface
1146
Creating Your Own User Controls
1147
XXXiX
ConTenTs