Professional C#, 2nd Edition Simon Robinson K Scott Allen Ollie Cornes Jay Glynn Zach Greenvoss Burton Harvey Christian Nagel Morgan Skinner Karli Watson Wrox Press Ltd ( © 2002 Wrox Press All rights reserved No part of this book may be reproduced, stored in a retrieval system or transmitted in any form or by any means, without the prior written permission of the publisher, except in the case of brief quotations embodied in critical articles or reviews The author and publisher have made every effort in the preparation of this book to ensure the accuracy of the information However, the information contained in this book is sold without warranty, either express or implied Neither the authors, Wrox Press, nor its dealers or distributors will be held liable for any damages caused or alleged to be caused either directly or indirectly by this book Latest Reprint: September 2002 Published by Wrox Press Ltd, Arden House, 1102 Warwick Road, Acocks Green, Birmingham, B27 6BH, UK Printed in USA ISBN 1-861007-04-3 Trademark Acknowledgements Wrox has endeavored to provide trademark information about all the companies and products mentioned in this book by the appropriate use of capitals However, Wrox cannot guarantee the accuracy of this information Credits Authors Simon Robinson K Scott Allen Ollie Cornes Jay Glynn Zach Greenvoss Burton Harvey Christian Nagel Morgan Skinner Karli Watson Additional Material Steve Danielson Julian Skinner Managing Editors Viv Emery Louay Fatoohi Commisioning Editor Julian Skinner Technical Editors Douglas Paterson Christian Peak Mankee Cheng Matthew Cumberlidge Nick Manning Project Manager Beth Sacks Author Agent Cilmara Lion Production Coordinator Abbie Forletta Indexing Martin Brooks Andrew Criddle Technical Reviewers Martin Beaulieu Bill Burris Martin Brooks Ramu Choppa Andreas Christiansen Aravind Corera Cristian Darie Mitch Denny Mike Erickson Slavo Furman Jeff Gabriel Sam Gentile Jacob Hammer Hope Hatfield Brian Hickey Ben Hickman Mark Horner Amit Kalani David Marcus Jason Montgomery Johan Normen Juan Ramon Ravirosa Jon Reid Tomas Restrepo Scott Robertson David Schultz Ian Smith Gavin Smyth Helmut Watson David West Proof Reader Chris Smith Illustrations Abbie Forletta Cover Chris Morris About the Authors Simon Robinson Simon Robinson lives in Lancaster in the UK, where he shares a house with some students He first encountered serious programming when he was doing his PhD in physics, modeling all sorts of weird things to do with superconductors and quantum mechanics The experience of programming was nearly enough to put him off computers for life (though, oddly, he seems to have survived all the quantum mechanics), and he tried for a while being a sports massage therapist instead He then realized how much money was in computers compared to sports massage, and therefore, rapidly got a job as a C++ programmer/researcher instead Simon is clearly the charitable, deep, spiritual type, who understands the true meaning of life His programming work eventually lead him into writing, and he now makes a living mostly from writing great books for programmers He is a great enthusiast for C#, which he firmly believes is set to revolutionize programming His spare time is spent either at dance classes (he loves performing arts) or on his pet project writing a computer strategy game With what little time is left, he is an honorary research associate at Lancaster University, where he does research in computational fluid dynamics with the environmental science department You can visit Simon's web site at http://www.SimonRobinson.com Apart from the editors who've been great to work with, and who've worked incredibly hard to help bring this book out, I'd like to thank: Joe Crump at Microsoft, for some very useful technical input and getting a number of queries answered Morgan Skinner for some useful suggestions for Chapter 5 Jason Sickler, a student at MIT, and alias Darrius, President of the Chinese, for agreeing to have details of his negotiations with me used in one of the samples in Chapter 12 K Scott Allen Over the last 10 years Scott Allen has designed software for Windows, embedded hardware, web applications, and massive multiplayer online games Scott holds an MS degree in Computer Science and an MCSD certification He lives in Hagerstown, Maryland, with his wife Vicky, and sons Alex and Christopher Ollie Cornes Ollie has been working with the Internet and the Microsoft platform since the early 90's In 1999 he co-founded a business-to-business Internet company and until recently, was their Chief Technical Officer Prior to that, his various roles involved programming, technical authoring, network management, writing, leading development projects, and consulting He has worked with Demon Internet, Microsoft, Saab, Tesco, Travelstore, and Vodafone Ollie has a degree in computer science and is Microsoft certified When he's not working he spends his time devouring books on human potential, practicing Chinese internal martial arts, meditating, and juggling fire I want to say thank you to my friends and family for the support and love you've given me Life throws the good and the bad at us all, and you have made the bad stuff much easier to get past Jay Glynn Jay started developing software in the late 1980's, writing applications for the Pick operating system in Pick BASIC Since then he has created applications using Paradox PAL and Object PAL, Delphi, Pascal, C/C++, Java, VBA, and Visual Basic Currently, Jay is a Project Coordinator and Architect for a large insurance company based in Nashville TN For the past five years he has been developing software for pen-based computers and, more recently, for ASP and server-based systems When not sitting in front of a keyboard, Jay is busy restoring a house in Franklin TN, playing a round of golf whenever possible, and watching Disney movies with his wife and three year old son Jay can be reached at jlsglynn@hotmail.com I would like to thank my wife Lydia and my son Samuel for being patient and understanding of all the late nights They are my motivation and inspiration Zach Greenvoss Zach Greenvoss is a Senior Consultant with Magenic Technologies, a Microsoft Gold Certified Solution Provider and industry leader in providing custom business solutions utilizing the latest Microsoft technologies He specializes in middle-tier architecture and implementation, utilizing various technologies including COM+, MSMQ, BizTalk, XML, and the NET Framework Zach's hobbies include traveling, caving, and playing his new XBox He can be reached at zachg@magenic.com I would like to thank my wife Amanda for being patient and understanding of all the long hours Burton Harvey Burton Harvey builds software that elegantly fulfils users' needs An MCSD with fifteen years' experience using Microsoft development tools, Burt is adept at a multitude of technologies including VB, COM, ASP, SQL, C#, C++, x86 assembler, UML, WML, and the Palm OS In 1998, Burt served as the founding editor of an online journal of scientific research, Scientia His Master's thesis, "The Outlaw Method for Solving Multimodal Functions with Parallel Genetic Algorithms", was presented at the International Conference on Evolutionary Computation, and Burt has spoken on C# at Wrox conferences in Las Vegas and Amsterdam As a consultant, Burt provides services to healthcare companies, music publishers, financial institutions, and sports organizations As the CEO of Promethean Personal Software, he develops handheld applications that empower the individual (http://www.propersonal.com) Burt currently resides in Nashville, Tennessee, and can be reached at kbharvey@mindspring.com This is his third book Christian Nagel Christian Nagel works as a trainer and consultant for Global Knowledge, the largest independent information technology training provider Christian started his computing career with PDP 11 and VAX/VMS platforms Since then he has used a variety of languages and platforms, including Pascal, C, X-Windows, Motif, C++, Java, COM/ATL, COM+, and currently C# and NET With his profound knowledge of Microsoft technologies - he's certified as Microsoft Certified Trainer (MCT), Solution Developer (MCSD), and Systems Engineer (MCSE) - he enjoys teaching others programming and architecting distributed solutions As founder of the NET User Group Austria and as MSDN Regional Director he is speaker at European conferences (TechEd, VCDC), and is contacted by many developers for coaching, consulting, and teaching customized courses and boot camps You will find Christian's web site at http://christian.nagel.net/ I would like to thank the people at Wrox who got me started writing books, and Christian Seidler who supports my activities at Global Knowledge Special thanks are also sent to the people at Microsoft, primarily to Alex Holy in Vienna for his organization of Visual Studio events and for his support of the NET user community Finally, and most importantly, I would like to thank my wife Elisabeth for her love and support Morgan Skinner I started my computing at a tender age on a ZX80 at school, where I was underwhelmed by some code my teacher had put together and decided I could do better in assembly language After getting hooked on Z80 (much better than those paltry three registers in 6502 land!) I graduated through the school ZX81s to my own ZX Spectrum Since then I've used all sorts of languages and platforms, including VAX Macro Assembler (way cool!), Pascal, Modula2, Smalltalk, x86 assembly language, PowerBuilder, C/C++, Visual Basic, and currently C# I've managed to stay in the same company for nearly 12 years, largely down to the diversity of the job and a good working environment In my spare time I'm a bit of a DIY nut, I spend lots of money on bicycles, and 'relax' by fighting weeds on my allotment I can be reached by e-mail at morgan.skinner@totalise.co.uk Karli Watson Karli Watson is an in-house author for Wrox Press with a penchant for multicolored clothing He started out with the intention of becoming a world famous nanotechnologist, so perhaps one day you might recognize his name as he receives a Nobel Prize For now, though, Karli's computing interests include all things mobile, and upcoming technologies such as C# He can often be found preaching about these technologies at conferences, as well as after hours in drinking establishments Karli is also a snowboarding enthusiast, and wishes he had a cat Thanks go to the Wrox team, both for helping me get into writing, and then for dealing with the results when I started Finally, and most importantly, thanks to my wife, Donna, for continuing to put up with me Steve Danielson Steve has been involved with programming since being introduced to the TRS-80 Model I computer in 1980 during the 6th grade, and began programming for Microsoft Windows with the release of Visual Basic 3.0 He is currently the Director of Architecture and Technology for Zeris Interactive, where he develops distributed applications for Zeris' clients using the gamut of Microsoft DNA tools and technologies Steve is also a private pilot and flies his Zenair CH-701 kitplane whenever he gets a chance He lives with his family in Wake Forest, NC, and can be reached at steve_danielson@hotmail.com Service Configuration Program service control programs \b, Service Control Program service program \b \rprogram, Service Program service-main function, Service Control Manager (SCM) System.ServiceProcess namespace \b \rSystemServiceProcess, System.ServiceProcess Namespace threads\b, Threading and Services troubleshooting \b \rtroubleshooting, Troubleshooting Windows 2000 \b \rWindows2000, Windows 2000 Service Features Windows Services \i \rServices2, Windows Services Windows services \i \rwindowsservices, Chapter 22: Windows Services Windows 2000 automatic recovery\rrecover, Recovery message queuing, Message Queuing Windows services \b \rWindows2000, Windows 2000 Service Features WindowsIdentity class, The Principal GetCurrent method, Windows Principal IIdentity interface, Windows Principal WindowState property, Windows Forms Form class, Example: SelfPlacingWindow WinNT provider, ADSI, Object Names in Windows NT Domains worker threads, Starting a Thread workspaces, Visual C++, Solutions and Projects world coordinates, GDI+, Drawing Scrollable Windows World Wide Web Consortium (see W3C) \t, XML Standards Support in NET wrapper classes, Binding to COM Components COM Callable Wrappers\rccw, COM-Callable Wrappers Runtime Callable Wrappers\rrcw, Runtime Callable Wrappers Write method, BinaryWriter class, Streams Write method, Console class, Console I/O Write method, FileStream class \rWrite1, The FileStream Class Write method, StreamWriter class \rWrite2, The StreamWriter Class write-only properties, Read-Only and Write-Only Properties write-only properties \rwriteonly1, Use of Properties and Methods WriteByte method, FileStream class \rWriteByte1, The FileStream Class WriteCData method, XmlTextWriter class, Using the XmlTextWriter Class WriteChars method, XmlTextWriter class \rWriteChars1, Using the XmlTextWriter Class WriteComment method, XmlTextWriter class, Using the XmlTextWriter Class WriteContentTo method, XmlDocument class \rWriteContentTo1, Inserting Nodes WriteEndElement method, XmlTextWriter class, Using the XmlTextWriter Class WriteEntry method, EventLog class, Adding Event Logging to Other Application Types WriteEvent method, EventLog class, Adding Event Logging WriteLine method, Console class, StringBuilder Members WriteLine method, Console class \rWriteLine1, Overloading Methods WriteLine method, Console class \rWriteLine2, Console I/O WriteLine method, StreamWriter class \rWriteLine1, Example: ReadWriteText WriteStartDocument method, XmlTextWriter class, Using the XmlTextWriter Class WriteStartElement method, XmlTextWriter class, Using the XmlTextWriter Class WriteTo method, XmlDocument class \rWriteTo1, Inserting Nodes WriteXml method, ADO.NET DataSet class, Converting Relational Data WriteXml method, ADO.NET DataSet class \rWriteXml1, Converting ADO.NET Data to XML WriteXml method, ADO.NET DataSet class \rWriteXml2, Reading and Writing a DiffGram WriteXmlSchema method, ADO.NET DataSet class, Converting ADO.NET Data to XML WriteXmlSchema method, ADO.NET DataSet class \rWriteXmlSchema1, Reading and Writing a DiffGram WSDL (Web Service Description Language), Exposing Web Services calling method in Web Service, WSDL WSDL (Web Service Description Language) \i \rWSDL, WSDL WSDL.exe file \rWSDLexe, Consuming Web Services W3C (World Wide Web Consortium) XML standards \b \rW3C1, XML Standards Support in NET Index bySimon Robinsonet al Wrox Press 2002 Index X X \t, Chapter 1: C# and NET Architecture X format specifier, Format Strings XML C# documentation, XML Documentation in Visual Studio NET DiffGrams \b \rDiffGrams1, Reading and Writing a DiffGram documentation \b \rXML1, XML Documentation DOM, Inserting Nodes DOM \b \rDOM1, Using the DOM in NET emas \b \rXML1, XML Schemas L clauses, SQL \rFORXML1, ExecuteXmlReader() (SqlClient Provider Only) L method, ADO.NET DataSet class \rReadXML1, Populating a DataSet from XML parser \b \rMSXML1, Using MSXML in NET relational data \b \rrelational1, Converting Relational Data schemas \b \rschemas1, Building a Schema WriteXml method, ADO.NET DataSet class \rWriteXml1, Writing XML Output W3C standards \b \rW3C1, XML Standards Support in NET XmlAttribute class, Using the DOM in NET XmlCDataSection class, Using the DOM in NET XmlCharacterData class, Using the DOM in NET XmlComment class, Using the DOM in NET XmlDataDocument class, Introducing the System.Xml Namespace XmlDataDocument class \rXmlDataDocument1, Converting ADO.NET Data to XML XmlDeclaration class, Inserting Nodes XmlDocument class, Using the DOM in NET XmlDocument class \b \rXmlDocument1, Using the XmlDocument Class XmlDocument class \rXmlDocument2, Converting ADO.NET Data to XML XmlDocumentFragment class, Using the DOM in NET XmlDocumentType class, Using the DOM in NET XmlElement class, Inserting Nodes XmlElementAttribute class, Serializing Objects in XML XmlEntity class, Using the DOM in NET XmlEntityReferenceNode class, Using the DOM in NET XmlLinkedNode class, Using the DOM in NET XmlNode class, Introducing the System.Xml Namespace XmlNode class \rXmlNode1, Using the DOM in NET XmlNodeList class \rXmlNodeList1, Using the DOM in NET XmlNotation class, Using the DOM in NET XmlProcessingInstruction class, Using the DOM in NET XmlReader class, Introducing the System.Xml Namespace XmlReader class \rXmlReader1, Reading and Writing Streamed XML XmlResolver class, Introducing the System.Xml Namespace XmlRootAttribute class, Serializing Objects in XML XmlSerializer class, Serializing Objects in XML XmlSerializer class \rXmlSerializer1, Serializing Objects in XML XmlSerializer class \rXmlSerializer2, Serializing Objects in XML XmlSerializer class \rXmlSerializer3, Serializing Objects in XML XmlSerializer class \rXmlSerializer4, Serialization Without Sourcecode Access XmlSignificantWhitespace class, Using the DOM in NET XmlText class, Using the DOM in NET XmlTextReader class, Using the XmlValidatingReader Class XmlTextReader class \b \rXmlTextReader1, Reading and Writing Streamed XML XmlTextWriter class, Reading and Writing Streamed XML XmlTextWriter class \b \rXmlTextWriter1, Using the XmlTextWriter Class XmlTextWriter class \rXmlTextWriter2, Inserting Nodes XmlTextWriter class \rXmlTextWriter3, Inserting Nodes XmlUrlResolver class, Introducing the System.Xml Namespace XmlValidatingReader class, Reading and Writing Streamed XML XmlValidatingReader class \b \rXmlValidatingReader1, Using the XmlValidatingReader Class XmlWhitespace class, Using the DOM in NET XmlWriter class, Introducing the System.Xml Namespace XmlWriter class \rXmlWriter1, Reading and Writing Streamed XML XML \i \rXML1, Chapter 11: Manipulating XML XML \i \rXML2, Writing XML Output XML resource files \i \rXML1, Using XML Resource Files Xml server controls, Web Server Controls XmlAttribute class, XML, Using the DOM in NET XmlAttributeOverrides class, XML \rXmlAttributeOverrides1, Serialization Without Sourcecode Access XmlAttributes class, XML \rXmlAttributes1, Serialization Without Sourcecode Access XmlCDataSection class, XML, Using the DOM in NET XmlCharacterData class, XML, Using the DOM in NET XmlComment class, XML, Using the DOM in NET XmlDataDocument class, XML, Introducing the System.Xml Namespace XmlDataDocument class, XML \rXmlDataDocument1, Converting ADO.NET Data to XML XmlDeclaration class, XML, Inserting Nodes XmlDocument class, XML, Using the DOM in NET CreateElement method, Inserting Nodes DocumentElement property, Inserting Nodes Load method, Converting ADO.NET Data to XML Save method \rSave1, Inserting Nodes SelectNodes method \rSelectNodes1, Using the XmlDocument Class SelectSingleNode method \rSelectSingleNode1, Using the XmlDocument Class WriteContentTo method \rWriteContentTo1, Inserting Nodes WriteTo method \rWriteTo1, Inserting Nodes XmlDocument class, XML \i \rXmlDocument1, Using the XmlDocument Class XmlDocument class, XML \rXmlDocument2, Converting ADO.NET Data to XML XmlDocumentFragment class, XML, Using the DOM in NET XmlDocumentType class, XML, Using the DOM in NET XmlElement class, XML, Inserting Nodes InnerText property, Inserting Nodes XmlElementAttribute class, XML, Serializing Objects in XML XmlElementAttribute class, XML \rXmlElementAttribute1, Serialization Without Sourcecode Access XmlEntity class, XML, Using the DOM in NET XmlEntityReferenceNode class, XML, Using the DOM in NET XmlLinkedNode class, XML, Using the DOM in NET XmlNode class, XML, Introducing the System.Xml Namespace InnerText property, Using the XmlDocument Class XmlNode class, XML \rXmlNode1, Using the DOM in NET XmlNodeList class, XML \rXmlNodeList1, Using the DOM in NET XmlNotation class, XML, Using the DOM in NET XmlProcessingInstruction class, XML, Using the DOM in NET XmlReader class, ExecuteXmlReader() (SqlClient Provider Only) XmlReader class, XML, Introducing the System.Xml Namespace XmlReader class, XML \rXmlReader1, Reading and Writing Streamed XML XmlReadMode enumeration, ADO.NET, Converting XML to ADO.NET Data XmlResolver class, XML, Introducing the System.Xml Namespace XmlRootAttribute class, XML, Serializing Objects in XML XmlSchemaCollection class, XML Add method, Using the Schemas Property XmlSchemaCollection class, XML \rXmlSchemaCollection1, Using the Schemas Property XmlSerializer class, XML, Serializing Objects in XML Deserialize method, Serializing Objects in XML Deserialize method \rDeserialize1, Serializing Objects in XML Serialize method, Serialization Without Sourcecode Access Serialize method \rSerialize1, Serializing Objects in XML XmlSerializer class, XML \rXmlSerializer1, Serializing Objects in XML XmlSerializer class, XML \rXmlSerializer2, Serializing Objects in XML XmlSerializer class, XML \rXmlSerializer3, Serializing Objects in XML XmlSerializer class, XML \rXmlSerializer4, Serialization Without Sourcecode Access XmlSignificantWhitespace class, XML, Using the DOM in NET XmlText class, XML, Using the DOM in NET XmlTextReader class, XML, Introducing the System.Xml Namespace AttributeCount property \rAttributeCount1, Retrieving Attribute Data constructors, Using the XmlTextReader Class GetAttribute method \rGetAttribute1, Retrieving Attribute Data HasAttributes property, Retrieving Attribute Data MoveToContent method \rMoveToContent1, Read Methods NodeType property, Using the XmlTextReader Class Read method, Read Methods Read method \rRead1, Using the XmlTextReader Class ReadChars method \rReadChars1, Read Methods ReadElementString method \rReadElementString1, Read Methods ReadStartElement method, Read Methods ReadString method \rReadString1, Read Methods XmlTextReader class, XML \i \rXmlTextReader1, Reading and Writing Streamed XML XmlTextReader class, XML \rXmlTextReader2, Using the XmlValidatingReader Class XmlTextWriter class, XML, Reading and Writing Streamed XML Close method, Inserting Nodes WriteCData method, Using the XmlTextWriter Class WriteChars method \rWriteChars1, Using the XmlTextWriter Class WriteComment method, Using the XmlTextWriter Class WriteEndElement method, Using the XmlTextWriter Class WriteStartDocument method, Using the XmlTextWriter Class WriteStartElement method, Using the XmlTextWriter Class XmlTextWriter class, XML \i \rXmlTextWriter1, Using the XmlTextWriter Class XmlTextWriter class, XML \rXmlTextWriter2, Inserting Nodes XmlTextWriter class, XML \rXmlTextWriter3, Inserting Nodes XmlUrlResolver class, XML, Introducing the System.Xml Namespace XmlValidatingReader class, XML, Reading and Writing Streamed XML Schemas property \b \rSchemas1, Using the Schemas Property ValidationEventHandler event, Using the XmlValidatingReader Class ValidationType property, Using the XmlValidatingReader Class XmlValidatingReader class, XML \i \rXmlValidatingReader1, Using the XmlValidatingReader Class XmlWhitespace class, XML, Using the DOM in NET XmlWriteMode enumeration, ADO.NET, Converting ADO.NET Data to XML XmlWriter class, XML, Introducing the System.Xml Namespace XmlWriter class, XML \rXmlWriter1, Reading and Writing Streamed XML XPath ator class \b \rXPathNavigator1, XPathNavigator ator class \rXPathNavigator2, Using Classes from the XPath Namespace definition, Using XPath and XSLT in NET Document class, Using Classes from the XPath Namespace ent class \b \rXPathDocument1, XPathDocument ent class \rXPathDocument2, Transforming XML terator class \b \rXPathNodeIterator1, XPathNodeIterator terator class \rXPathNodeIterator2, Using Classes from the XPath Namespace XPath \i \rXPath1, The System.XPath Namespace XPathDocument class, XPath, Using Classes from the XPath Namespace XPathDocument class, XPath \i \rXPathDocument1, XPathDocument XPathDocument class, XPath \rXPathDocument2, Transforming XML XPathNavigator class, XPath Evaluate method \rEvaluate1, Using Classes from the XPath Namespace Select method, Using Classes from the XPath Namespace SelectAncestors method, XPathNavigator SelectChildren method, XPathNavigator SelectDescendants method, Using Classes from the XPath Namespace XPathNavigator class, XPath \i \rXPathNavigator1, XPathNavigator XPathNavigator class, XPath \rXPathNavigator2, Using Classes from the XPath Namespace XPathNodeIterator class, XPath Current property, Using Classes from the XPath Namespace MoveNext method, Using Classes from the XPath Namespace XPathNodeIterator class, XPath \i \rXPathNodeIterator1, XPathNodeIterator XPathNodeIterator class, XPath \rXPathNodeIterator2, Using Classes from the XPath Namespace XSD (XML Schema Definition Language) \i \rXSD1, XML Schemas XSD (XML Schema Definition Language) \rXSD1, Building a Schema XSLT XsltArgumentList class \b \rXsltArgumentList1, Using XsltArgumentList XslTransform class \rXslTransform1, Transforming XML XSLT \i \rXSLT1, The System.Xml.Xsl Namespace XsltArgumentList class, XSLT \i \rXsltArgumentList1, Using XsltArgumentList XslTransform class, XSLT Load method, Using XsltArgumentList Transform method \rTransform1, Transforming XML XslTransform class, XSLT \rXslTransform1, Transforming XML Index bySimon Robinsonet al Wrox Press 2002 Index Y-Z Y \t, Chapter 1: C# and NET Architecture Z \t, Chapter 1: C# and NET Architecture zero-impact installation, Private Assemblies zero-impact installation \i, Features of Assemblies zone code group membership condition, Code Groups list of zones, Code Groups managing using Internet Explorer, Code Groups ZoneIdentityPermission, Code Access Permissions and Permissions Sets zones, Code Groups managing \b \r zone, Managing Zones Professional C#, Second Edition ISBN:0764543989 bySimon Robinsonet al Wrox Press 2002 (1223 pages) This book is the ideal introduction to the C# language and the NET Framework, and will become an indispensable companion for any user of C# and NET Table of Contents Back Cover Back Cover It is no exaggeration to describe the C# language and its associated environment, the NET Framework, as the most important new technology for developers in many years .NET provides a new environment within which you can develop almost any Windows-based or web-based application, while C# is a new programming language designed specifically to work with NET This book is the ideal introduction to the C# language and the NET Framework, and will become an indispensable companion for any user of C# and NET With this book, you will: Learn the key concepts of the C# language Progress onto a complete exploration of programming the NET Framework with C# This book is aimed at the experienced developer, although no previous knowledge of C# or NET programming is assumed What you will learn from this book How to program in the object-oriented C# language Writing Windows applications and Windows services Writing web pages and web services with ASP.NET Manipulating XML using C# Understanding NET Assemblies Using ADO.NET to access databases Integration with COM, COM+, and Active Directory Distributed applications with NET Remoting Generating graphics using C# Accessing files and the Registry, and controlling NET security ... Table of Contents Professional C# , 2nd Edition Introduction Chapter 1 - C# and NET Architecture Chapter 2 - C# Basics Chapter 3 - Object-Oriented C# Chapter 4 - Advanced C# Topics Chapter 5 - C# and the Base Classes... Improved Security – each assembly can also contain built-in security information that can indicate precisely who or what category of user or process is allowed to call which methods on which classes... COM Interoperability Chapter 18 - COM+ Services Chapter 19 - Graphics with GDI+ Chapter 20 - Accessing the Internet Distributed Applications Chapter 21 with NET Remoting Chapter 22 - Windows Services Chapter 23