Beginning Visual C#® 2012 Programming
Published by
John Wiley & Sons, Inc.
10475 Crosspoint Boulevard
Indianapolis, IN 46256
www.wiley.com
Copyright © 2013 by John Wiley & Sons, Inc., Indianapolis, Indiana
Published simultaneously in Canada
ISBN: 978-1-118-31441-8
ISBN: 978-1-118-33194-1 (ebk)
ISBN: 978-1-118-33540-6 (ebk)
ISBN: 978-1-118-39637-7 (ebk)
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 publishes in a variety of print and electronic formats and by print-on-demand. Some material included with standard print versions of this book may not be included in e-books or in print-on-demand. If this book refers to media such as a CD or DVD that is not included in the version you purchased, you may download this material at http://booksupport.wiley.com. For more information about Wiley products, visit www.wiley.com.
Library of Congress Control Number: 2012946841
Trademarks: Wiley, the Wiley logo, Wrox, the Wrox logo, Wrox Programmer to Programmer, and related trade dress are trademarks or registered trademarks of John Wiley & Sons, Inc. and/or its affiliates, in the United States and other countries, and may not be used without written permission. Visual C# is a registered trademark of Microsoft Corporation. All other trademarks are the property of their respective owners. John Wiley & Sons, Inc., is not associated with any product or vendor mentioned in this book.
for donna
— Karli Watson
Love is as strong as death;
Many waters cannot quench love,
neither can the floods drown it.
From the inside of my Mum’s hymnbook, of which I now have the privilege of being the custodian.
— Morgan Skinner
KARLI WATSON is an IT contractor and author currently working in London in the financial sector. For the most part, he immerses himself in .NET (in particular C#) and has written numerous books in the field for several publishers. 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 as @karlequin, and maybe one day he’ll get round to making himself a website.
JACOB VIBE HAMMER is a software architect and developer at Kamstrup, where he is helping the company develop world class Smart Grid solutions for large public utilities. He started programming just about the time when he was able to spell the word “BASIC” — which, incidentally, is the first programming language he ever used. Since then, he has worked with numerous programming languages and solution architectures; however, since the turn of the century, he has worked primarily with the .NET platform. Today, his programming time is spent working primarily with C# and WPF, as well as toying with NoSQL databases.
A Danish citizen, Jacob lives in Aarhus, Denmark, with his wife and son.
JON D. REID is the Director of Software Technology for IFS Metrix Service Management (www.IFSWORLD.com/Metrix). He has coauthored a number of .NET books, including Beginning Visual C# 2010, Fast Track C#, Pro Visual Studio .NET, and many others.
MORGAN SKINNER started messing with computers in 1980 when he first started programming at school in assembly language. Since then he’s used many languages commercially, including Pascal, Modula-2, VAX Macro assembly language, Smalltalk, PowerBuilder, C, C++ and C# (to name the more well-known ones). He joined Microsoft in 2001 after getting his hands on .NET for the first time, and he spent nearly 10 years there as an Application Development Consultant, working with some of the smallest — and largest — companies in the UK. Morgan left Microsoft in 2011 and is now an independent contractor working on bespoke systems; see www.morganskinner.com for more details.
DANIEL KEMPER is a software architect with a couple of Microsoft certifications. He specializes in rich Internet application, desktop client, and reporting technologies.
CHRISTIAN NAGEL is a Microsoft Regional Director and Microsoft MVP, an associate of thinktecture, and founder of CN innovation. A software architect and developer, he offers training and consulting on how to develop solutions using the Microsoft platform. He draws 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 .NET solutions. Currently, he mainly coaches the development of Windows 8 apps accessing Windows Azure services. With his profound knowledge of Microsoft technologies, he has written numerous books and is certified as a Microsoft Certified Trainer and Professional Developer. Christian speaks at international conferences such as TechEd, Basta!, and TechDays, and he founded INETA Europe to support .NET user groups. You can contact Christian via his websites, www.cninnovation.com and www.thinktecture.com. You can also follow his tweets at @christiannagel.
DOUG HOLLAND is an architect with Microsoft’s Developer and Platform Evangelism team and works with Microsoft’s strategic ISV partners to help bring new and exciting experiences to consumers on Windows 8 and Windows Phone 8.
RICHARD HOPTON has been developing business software systems for 10 years, currently focusing on designing and building highly scalable REST-based API solutions using C# for a digital media company in London, UK. Richard has been published in Microsoft’s monthly developer newsletter, MSDN Flash, and has spoken at numerous developer community events throughout the UK.
MARCEL MEIJER has lived in the world of information and communications technologies for more than 15 years. Currently, he is mainly concerned with Windows Azure, the cloud, C#, software development, and architecture. He works as a senior architect at VX Company. In his spare time, he is a board member of the SDN (Software Development Network; www.sdn.nl). At SDN, he is responsible for arranging speakers for the SDN Events (SDE); selecting content for SDN Conferences; and arranging and editing content for SDN Magazine.
ACQUISITIONS EDITOR
Mary James
PROJECT EDITOR
Patrick Meader
TECHNICAL EDITORS
Doug Holland
Richard Hopton
Marcel Meijer
PRODUCTION EDITOR
Christine Mugnolo
COPY EDITOR
Kezia Endsley
EDITORIAL MANAGER
Mary Beth Wakefield
FREELANCER EDITORIAL MANAGER
Rosemarie Graham
ASSOCIATE DIRECTOR OF MARKETING
David Mayhew
MARKETING MANAGER
Ashley Zurcher
BUSINESS MANAGER
Amy Knies
PRODUCTION MANAGER
Tim Tate
VICE PRESIDENT AND EXECUTIVE GROUP PUBLISHER
Richard Swadley
VICE PRESIDENT AND EXECUTIVE PUBLISHER
Neil Edde
ASSOCIATE PUBLISHER
Jim Minatel
PROJECT COORDINATOR, COVER
Katie Crocker
PROOFREADERS
Sarah Kaikini, Word One New York
Scott Klemp, Word One New York
James Saturnio, Word One New York
INDEXER
Robert Swanson
COVER DESIGNER
LeAndra Young
COVER IMAGE
© Lisa Loyd / iStockphoto
THANKS ONCE AGAIN TO EVERYONE AT WILEY for help, encouragement, and understanding. Striking the balance between getting the book done quickly and ensuring it’s accurate in the face of numerous product and naming changes is never easy, but between us I think we’ve just about managed it. Special thanks to Patrick Meader for remaining (mostly) calm throughout the project — or at least calmer than me . . . As ever, no acknowledgements would be complete without thanks to my wife, donna, who very nearly succeeds in keeping me sane during writing periods. And, of course, thanks to you for (hopefully) buying this book, and the very best of luck in your coding adventures!
— Karli Watson
C# IS A RELATIVELY NEW LANGUAGE that was unveiled to the world when Microsoft announced the first version of its .NET Framework in July 2000. Since then its popularity has rocketed, and it has arguably become the language of choice for both desktop and web developers who use the .NET Framework. Part of the appeal of C# comes from its clear syntax, which derives from C/C++ but simplifies some things that have previously discouraged some programmers. Despite this simplification, C# has retained the power of C++, and there is now no reason not to move into C#. The language is not difficult and it’s a great one to learn elementary programming techniques with. This ease of learning, combined with the capabilities of the .NET Framework, make C# an excellent way to start your programming career.
The latest release of C#, C# 5, which is included with version 4.5 of the .NET Framework, builds on the existing successes and adds even more attractive features. The latest release of Visual Studio (Visual Studio 2012) and the Visual Studio Express 2012 line of development tools also bring many tweaks and improvements to make your life easier and dramatically increase your productivity.
This book is intended to teach you about all aspects of C# programming, from the language itself, through desktop and web programming, to making use of data sources, and finally to some new and advanced techniques. You’ll also learn about the capabilities of Visual Studio 2012, and all the ways that this product can aid your application development.
The book is written in a friendly, mentor-style fashion, with each chapter building on previous ones, and every effort is made to ease you into advanced techniques painlessly. At no point will technical terms appear from nowhere to discourage you from continuing; every concept is introduced and discussed as required. Technical jargon is kept to a minimum; but where it is necessary, it, too, is properly defined and laid out in context.
The authors of this book are all experts in their field, and are all enthusiastic in their passion for both the C# language and the .NET Framework. Nowhere will you find a group of people better qualified to take you under their collective wing and nurture your understanding of C# from first principles to advanced techniques. Along with the fundamental knowledge it provides, this book is packed full of helpful hints, tips, exercises, and full-fledged example code (available for download at p2p.wrox.com) that you will find yourself returning to repeatedly as your career progresses.
We pass this knowledge on without begrudging it, and hope that you will be able to use it to become the best programmer you can be. Good luck, and all the best!
This book is for everyone who wants to learn how to program in C# using the .NET Framework. It is for absolute beginners who want to give programming a try by learning a clean, modern, elegant programming language. But it also for people familiar with other programming languages who want to explore the .NET platform, as well as for existing .NET developers who want to give Microsoft’s .NET flagship language a try.
The early chapters cover the language itself, assuming no prior programming experience. If you have programmed in other languages before, then much of the material in these chapters will be familiar. Many aspects of C# syntax are shared with other languages, and many structures are common to practically all programming languages (such as looping and branching structures). However, even if you are an experienced programmer you will benefit from looking through these chapters to learn the specifics of how these techniques apply to C#.
If you are new to programming, you should start from the beginning, where you will learn basic programming concepts and become acquainted with both C# and the .NET platform that underpins it. If you are new to the .NET Framework but know how to program, you should read Chapter 1 and then skim through the next few chapters before continuing with the application of the C# language. If you know how to program but haven’t encountered an object-oriented programming language before, you should read the chapters from Chapter 8 onward.
Alternatively, if you already know the C# language, you might want to concentrate on the chapters dealing with the most recent .NET Framework and C# language developments, specifically the chapters on collections, generics, and C# language enhancements (Chapters 11 to 14), or skip the first section of the book completely and start with Chapter 15.
The chapters in this book have been written with a dual purpose in mind: they can be read sequentially to provide a complete tutorial in the C# language, and they can be dipped into as required reference material.
In addition to the core material, starting with Chapter 3 each chapter also includes a selection of exercises at the end, which you can work through to ensure that you have understood the material. The exercises range from simple multiple choice or true/false questions to more complex exercises that require you to modify or build applications. The answers to all the exercises are provided in Appendix A. You can also find these exercises as part of the wrox.com code downloads for this book at www.wrox.com/remtitle.cgi?isbn=9781118314418 on the Download Code tab.
This book also gives plenty of love and attention to coincide with the release of C# 5 and .NET 4.5. Every chapter received an overhaul, with less relevant material removed, and new material added. All of the code has been tested against the latest version of the development tools used, and all of the screenshots have been retaken in Windows 8 to provide the most current windows and dialog boxes.
Although we hate to admit our own fallibility, any errors from previous editions have been fixed, and many other reader comments have been addressed. Hopefully, we haven’t introduced many new errors, but any that have slipped through our web of experts will be corrected online as soon as we find them.
New highlights of this edition include the following:
This book is divided into six sections:
The following sections describe the chapters in the five major parts of this book.
Chapter 1 introduces you to C# and how it fits into the .NET landscape. You’ll learn the fundamentals of programming in this environment, and how Visual Studio 2012 (VS) fit in.
Chapter 2 starts you off with writing C# applications. You’ll look at the syntax of C# and put the language to use with sample command-line and Windows applications. These examples demonstrate just how quick and easy it can be to get up and running, and along the way you’ll be introduced to the VS development environment and the basic windows and tools that you’ll be using throughout the book.
Next you’ll learn more about the basics of the C# language. You’ll learn what variables are and how to manipulate them in Chapter 3. You’ll enhance the structure of your applications with flow control (looping and branching) in Chapter 4, and see some more advanced variable types such as arrays in Chapter 5. In Chapter 6 you’ll start to encapsulate your code in the form of functions, which make it much easier to perform repetitive operations and make your code much more readable.
By the beginning of Chapter 7 you’ll have a handle on the fundamentals of the C# language, and will focus on debugging your applications. This involves looking at outputting trace information as your applications are executed, and at how VS can be used to trap errors and lead you to solutions for them with its powerful debugging environment.
From Chapter 8 onward you’ll learn about object-oriented programming (OOP), starting with a look at what this term means, and an answer to the eternal question, “What is an object?” OOP can seem quite difficult at first. The whole of Chapter 8 is devoted to demystifying it and explaining what makes it so great, and you won’t actually deal with much C# code until the very end of the chapter.
Everything changes in Chapter 9, when you put theory into practice and start using OOP in your C# applications. This is where the true power of C# lies. You’ll start by looking at how to define classes and interfaces, and then move on to class members (including fields, properties, and methods) in Chapter 10. At the end of that chapter you’ll start to assemble a card game application, which is developed over several chapters, and will help to illustrate OOP.
Once you’ve learned how OOP works in C#, Chapter 11 moves on to look at common OOP scenarios, including dealing with collections of objects, and comparing and converting objects. Chapter 12 takes a look at a very useful feature of C# that was introduced in .NET 2.0: generics, which enable you to create very flexible classes. Next, Chapter 13 continues the discussion of the C# language and OOP with some additional techniques, notably events, which become very important in, for example, Windows programming. Finally, Chapter 14 focuses on C# language features that were introduced with versions 3.0, 4, and 5 of the language.
Chapter 15 starts by introducing you to what is meant by Windows programming, and looks at how this is achieved in VS. It focuses on WPF as a tool that enables you to build desktop applications in a graphical way, and assemble advanced applications with the minimum of effort and time. You’ll start with the basics of WPF programming, and build up your knowledge in both this chapter and Chapter 16, which demonstrates how you can use the wealth of controls supplied by the .NET Framework in your applications.
Chapter 17 shows you how you can create Windows Store applications, which are new to Windows 8. This is an exciting new way to provide users with beautiful, full-screen user experiences. You will also see how you can make your applications ready to be sold from the Windows Store.
Chapter 18 discusses how to deploy your applications, including how to make installation programs that enable your users to get up and running with your applications in double-quick time.
This section is structured in a similar way to the desktop programming section. It starts with Chapter 19, which describes the controls that make up the simplest of web applications, and how you can fit them together and make them perform tasks using ASP.NET. The chapter then moves on to look at more advanced techniques, ASP.NET AJAX, versatile controls, and state management in the context of the web, as well as how to conform to web standards.
Next, Chapter 20 examines the deployment of web applications and services, in particular the features of VS that enable you to publish applications to the web with the click of a button.
Chapter 21 looks at how your applications can save and retrieve data to disk, both as simple text files and as more complex representations of data. You’ll also learn how to compress data, how to work with legacy data such as comma-separated value (CSV) files, and how to monitor and act on file system changes.
In Chapter 22 you’ll learn about the de facto standard for data exchange—namely, XML. By this point in the book, you’ll have touched on XML several times in preceding chapters, but this chapter lays out the ground rules and shows you what all the excitement is about.
The remainder of this part looks at LINQ, which is a query language built in to the latest versions of the .NET Framework. You start in Chapter 23 with a general introduction to LINQ, and then you will use LINQ to access a database and other data in Chapter 24.
Finally, in this part of the book you will look at some exciting new technologies that have emerged with the most recent .NET Framework releases. Chapter 25 is an introduction to Windows Communication Foundation (WCF), which provides you with the tools you need for enterprise-level programmatic access to information and capabilities across local networks and the Internet. You will see how you can use WCF to expose complex data and functionality to web and desktop applications in a platform-independent way.
The last chapter of the book, Chapter 26, looks at Windows Workflow Foundation (WF). WF enables you to implement workflow functionality in your applications, which means you can define operations that are performed in a specific order controlled by external interactions, which is very useful for many types of applications.
The code and descriptions of C# and the .NET Framework in this book apply to C# 5 and .NET 4.5. You don’t need anything other than the Framework to understand this aspect of the book, but many of the examples require a development tool. This book uses Visual Studio 2012 as its primary development tool; however, if you don’t have this, you will be able to use the free Visual Studio Express 2012 line of products. For the first part of the book, Visual Studio Express 2012 for Windows Desktop will enable you to create desktop and console applications. For later chapters, you may also use Visual Studio Express 2012 for Windows 8 in order to create Windows Store applications, Visual Studio Express 2012 for Web to create web applications, and SQL Server Express 2012 for applications that access databases. Some functionality is available only in Visual Studio 2012, but this won’t stop you from working through any of the examples in this book.
The source code for the samples is available for download from the Wrox website at:
www.wrox.com/remtitle.cgi?isbn=9781118314418
To help you get the most from the text and keep track of what’s happening, we’ve used a number of conventions throughout the book.
As you work through the examples in this book, you may choose either to type in all the code manually or to use the source code files that accompany the book. All the source code used in this book is available for download at http://www.wrox.com. A file name is provided for each code snippet or listing presented in the book and this file name corresponds to the source code on the www.wrox.com site. When at the site, simply locate the book’s title (either by using the Search box or by using one of the title lists) and click the Download Code link on the book’s detail page to obtain all the source code for the book.
NOTE Because many books have similar titles, you may find it easiest to search by ISBN; this book’s ISBN is 978-1-118-31441-8.
After you download the code, just decompress it with your favorite compression tool. Alternatively, you can go to the main Wrox code download page at http://www.wrox.com/dynamic/books/download.aspx to see the code available for this book and all other Wrox books.
We make every effort to ensure that there are no errors in the text or in the code. However, no one is perfect, and mistakes do occur. If you find an error in one of our books, like a spelling mistake or faulty piece of code, we would be grateful for your feedback. By sending in errata you may save another reader hours of frustration and at the same time you can help us provide even higher quality information.
To find the errata page for this book, go to http://www.wrox.com and locate the title using the Search box or one of the title lists. Then, on the book details page, click the Book Errata link. On this page you can view all errata that has been submitted for this book and posted by Wrox editors.
NOTE A complete book list including links to each book’s errata is also available at www.wrox.com/misc-pages/booklist.shtml.
If you don’t spot “your” error on the Book Errata page, go to www.wrox.com/contact/techsupport.shtml and complete the form there to send us the error you have found. We’ll check the information and, if appropriate, post a message to the book’s errata page and fix the problem in subsequent editions of the book.
For author and peer discussion, join the P2P forums at http://p2p.wrox.com. The forums are a Web-based system for you to post messages relating to Wrox books and related technologies and interact with other readers and technology users. The forums offer a subscription feature to e-mail you topics of interest of your choosing when new posts are made to the forums. Wrox authors, editors, other industry experts, and your fellow readers are present on these forums.
At http://p2p.wrox.com, you will find a number of different forums that will help you, not only as you read this book, but also as you develop your own applications. To join the forums, just follow these steps:
NOTE You can read messages in the forums without joining P2P, but in order to post your own messages, you must join.
Once you join, you can post new messages and respond to messages other users post. You can read messages at any time on the web. If you would like to have new messages from a particular forum e-mailed to you, click the Subscribe to this Forum icon by the forum name in the forum listing.
For more information about how to use the Wrox P2P, be sure to read the P2P FAQs for answers to questions about how the forum software works, as well as many common questions specific to P2P and Wrox books. To read the FAQs, click the FAQ link on any P2P page.