ebook img

Learn C-Sharp - Includes the C-Sharp 3.0 Features PDF

425 Pages·2007·3.91 MB·English
Save to my drive
Quick download
Download
Most books are stored in the elastic cloud where traffic is expensive. For this reason, we have a limit on daily download.

Preview Learn C-Sharp - Includes the C-Sharp 3.0 Features

Learn C# Includes the C# 3.0 Features Sam A. Abolrous Wordware Publishing, Inc. Library of Congress Cataloging-in-Publication Data Abolrous, Sam A. Learn C# / by Sam A. Abolrous. p. cm. Includes index. ISBN-13: 978-1-59822-035-3 (pbk.) ISBN-10: 1-59822-035-7 1. C# (Computer program language) I. Title. QA76.73.C154A416 2007 005.13'3--dc22 2007024261 © 2008, Wordware Publishing, Inc. All Rights Reserved 1100 Summit Avenue, Suite 102 Plano, Texas 75074 No part of this book may be reproduced in any form or by any means without permission in writing from Wordware Publishing, Inc. Printed in the United States of America ISBN-13: 978-1-59822-035-3 ISBN-10: 1-59822-035-7 10 9 8 7 6 5 4 3 2 1 0708 All brand names and product names mentioned in this book are trademarks or service marks of their respective companies. Any omission or misuse (of any kind) of service marks or trademarks should not be regarded as intent to infringe on the property of others. The publisher recognizes and respects all marks used by companies, manufacturers, and developers as a means to distinguish their products. This book is sold as is, without warranty of any kind, either express or implied, respecting the contents of this book and any disks or programs that may accompany it, including but not limited to implied warranties for the book’s quality, performance, merchantability, or fitness for any particular purpose. Neither Wordware Publishing, Inc. nor its dealers or distributors shall be liable to the purchaser or any other person or entity with respect to any liability, loss, or damage caused or alleged to have been caused directly or indirectly by this book. All inquiries for volume purchases of this book should be addressed to Wordware Publishing, Inc., at the above address. Telephone inquiries may be made by calling: (972) 423-0090 To Camelia, my love and my wife. This page intentionally left blank. Contents Foreword. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xiii Preface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xv Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xvii Conventions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xviii Chapter 1 Introduction to C# and .NET . . . . . . . . . . . . . . . . . . . . 1 1-1 Object-Oriented Programming . . . . . . . . . . . . . . . . . . . . . . . . . 1 1-2 C#: The OOP Language. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 1-3 The .NET Framework. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 1-3-1 CLR and Managed Code. . . . . . . . . . . . . . . . . . . . . . . . . . 3 1-3-2 MSIL and JIT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 1-3-3 Metadata . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 1-3-4 Assemblies. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 1-3-5 Garbage Collection . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 1-3-6 Putting Things Together . . . . . . . . . . . . . . . . . . . . . . . . . . 5 1-3-7 ILASM and ILDASM . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 1-4 A First Look at the C# Code . . . . . . . . . . . . . . . . . . . . . . . . . . 6 1-4-1 The C# Code. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 1-4-2 The IL Code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 1-4-3 The Manifest. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 1-4-4 Using the Library File . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 1-5 How to Get a Free C# Compiler . . . . . . . . . . . . . . . . . . . . . . . . 10 1-5-1 Compiling Programs in the Command-Line Environment . . . . . . . . 11 1-5-1-1 If You Have the Compiler without the IDE . . . . . . . . . . . . 11 1-5-1-2 If You Have the Visual Studio IDE . . . . . . . . . . . . . . . . 12 1-6 Comparison of C# and C++ . . . . . . . . . . . . . . . . . . . . . . . . . . 13 1-7 The Features of C# 2005 . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 1-8 The New Features of C# 3.0 . . . . . . . . . . . . . . . . . . . . . . . . . . 15 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 Chapter 2 Your First Go at C# Programming . . . . . . . . . . . . . . . . . 17 2-1 The “Hello, World!” C# Program . . . . . . . . . . . . . . . . . . . . . . . 17 2-1-1 Compiling and Running the Program. . . . . . . . . . . . . . . . . . . 18 2-1-2 Comments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 2-1-3 Class Declaration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 2-1-4 The Main Method . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 2-1-5 Using the .NET Methods for Displaying Results . . . . . . . . . . . . . 20 v vi | Contents 2-2 Using Directives . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 2-3 Using Local Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 2-4 The Program Architecture . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 2-5 Qualifying Names . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 2-6 Common Conventions for Writing Code . . . . . . . . . . . . . . . . . . . 27 2-7 Code Documentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 Chapter 3 C# Data Types . . . . . . . . . . . . . . . . . . . . . . . . . . 31 3-1 Data Types. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 3-2 Built-in Data Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 3-3 Value Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 3-3-1 Variable Initialization. . . . . . . . . . . . . . . . . . . . . . . . . . . 33 3-3-2 Default Values . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34 3-4 Reference Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 3-4-1 The C# Reference Types . . . . . . . . . . . . . . . . . . . . . . . . . 35 3-4-2 Boxing and Unboxing . . . . . . . . . . . . . . . . . . . . . . . . . . 35 3-5 Simple Data Types. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 3-6 Creating and Manipulating Arithmetic Expressions . . . . . . . . . . . . . . 39 3-6-1 The Basic Arithmetic Operators (+, –, *, /) . . . . . . . . . . . . . . . . 39 3-6-2 The Modulus Operator (%) . . . . . . . . . . . . . . . . . . . . . . . . 39 3-6-3 The Assignment Operators . . . . . . . . . . . . . . . . . . . . . . . . 40 3-6-4 Increment and Decrement Operators (++, ––) . . . . . . . . . . . . . . 40 3-6-5 Operator Associativity . . . . . . . . . . . . . . . . . . . . . . . . . . 41 3-6-6 How to Get the Type Name. . . . . . . . . . . . . . . . . . . . . . . . 43 3-6-7 Evaluating Expressions with Mixed Types . . . . . . . . . . . . . . . . 43 3-6-8 Adding a Suffix to Numeric Data. . . . . . . . . . . . . . . . . . . . . 44 3-6-8-1 Real Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44 3-6-8-2 Integral Types . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 3-6-9 Conversion between Types . . . . . . . . . . . . . . . . . . . . . . . . 46 3-7 The char Type . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47 3-8 Formatting Results. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49 3-8-1 The Currency Format . . . . . . . . . . . . . . . . . . . . . . . . . . . 49 3-8-2 The Decimal Format . . . . . . . . . . . . . . . . . . . . . . . . . . . 49 3-8-3 The Fixed-point Format . . . . . . . . . . . . . . . . . . . . . . . . . 49 3-8-4 The General Format . . . . . . . . . . . . . . . . . . . . . . . . . . . 50 3-8-5 The Numeric Format . . . . . . . . . . . . . . . . . . . . . . . . . . . 50 3-8-6 The Scientific Format. . . . . . . . . . . . . . . . . . . . . . . . . . . 50 3-8-7 The Hexadecimal Format . . . . . . . . . . . . . . . . . . . . . . . . . 50 3-9 The Nullable Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53 3-9-1 Using the Nullable Structure Properties . . . . . . . . . . . . . . . . . 54 3-9-2 Using the ?? Operator . . . . . . . . . . . . . . . . . . . . . . . . . . 54 3-10 The string Type . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56 3-10-1 String Expressions . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56 3-10-2 String Operators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57 Contents | vii 3-10-2-1 String Concatenation (+, +=) . . . . . . . . . . . . . . . . . . . 57 3-10-2-2 Using the StringBuilder Class. . . . . . . . . . . . . . . . . . . 58 3-10-2-3 The Equality Operator (==) . . . . . . . . . . . . . . . . . . . . 58 3-10-2-4 The [] Operator . . . . . . . . . . . . . . . . . . . . . . . . . . 58 3-10-2-5 The @ Symbol . . . . . . . . . . . . . . . . . . . . . . . . . . 59 3-11 Reading the Keyboard Input . . . . . . . . . . . . . . . . . . . . . . . . . 61 3-12 Converting Strings to Numbers . . . . . . . . . . . . . . . . . . . . . . . . 62 3-12-1 Using the Convert Class . . . . . . . . . . . . . . . . . . . . . . . . . 62 3-12-2 Using the Parse Method . . . . . . . . . . . . . . . . . . . . . . . . . 63 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64 Chapter 4 Building the Program Logic . . . . . . . . . . . . . . . . . . . . 65 4-1 Using Conditions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65 4-1-1 Relational Operators . . . . . . . . . . . . . . . . . . . . . . . . . . . 65 4-1-2 Logical Operators . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67 4-1-2-1 The Logical AND Operators (&&, &) . . . . . . . . . . . . . . . 67 4-1-2-2 The Logical OR Operators (||, |) . . . . . . . . . . . . . . . . . . 67 4-1-2-3 The Logical NOT Operator (!) . . . . . . . . . . . . . . . . . . . 68 4-1-2-4 The Bitwise Operators . . . . . . . . . . . . . . . . . . . . . . . 68 4-2 The if-else Construct . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68 4-2-1 Manipulating Characters . . . . . . . . . . . . . . . . . . . . . . . . . 70 4-2-2 Nested if-else Statements . . . . . . . . . . . . . . . . . . . . . . . . . 71 4-3 The switch Construct . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71 4-4 The Conditional Expression . . . . . . . . . . . . . . . . . . . . . . . . . . 74 4-5 Using Libraries . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76 4-6 Repetition Loops . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77 4-6-1 The for Loop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77 4-6-1-1 Using continue and break . . . . . . . . . . . . . . . . . . . . . 78 4-6-1-2 Available Options in the for Loop . . . . . . . . . . . . . . . . . 78 4-6-1-3 Nesting Loops . . . . . . . . . . . . . . . . . . . . . . . . . . . 79 4-6-2 The while Loop. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80 4-6-3 The do-while Loop . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82 4-6-4 Branching Statements. . . . . . . . . . . . . . . . . . . . . . . . . . . 84 4-7 Arrays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84 4-7-1 One-Dimensional Arrays . . . . . . . . . . . . . . . . . . . . . . . . . 85 4-7-2 Declaring and Initializing Arrays . . . . . . . . . . . . . . . . . . . . . 85 4-7-3 Multi-Dimensional Arrays . . . . . . . . . . . . . . . . . . . . . . . . 86 4-7-4 Jagged Arrays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86 4-7-5 Accessing Array Elements . . . . . . . . . . . . . . . . . . . . . . . . 87 4-8 Using Program Arguments . . . . . . . . . . . . . . . . . . . . . . . . . . 89 4-9 Using .NET Properties and Methods with Arrays . . . . . . . . . . . . . . . 90 4-9-1 Array’s Length (Length) . . . . . . . . . . . . . . . . . . . . . . . . . 91 4-9-2 Array’s Rank (Rank) . . . . . . . . . . . . . . . . . . . . . . . . . . . 91 4-9-3 Sorting an Array (Array.Sort) . . . . . . . . . . . . . . . . . . . . . . 91 4-9-4 Reversing an Array (Array.Reverse) . . . . . . . . . . . . . . . . . . . 91 viii | Contents 4-9-5 Resizing an Array (Array.Resize) . . . . . . . . . . . . . . . . . . . . 93 4-10 The foreach Loop. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96 Chapter 5 Using Classes. . . . . . . . . . . . . . . . . . . . . . . . . . . 97 5-1 Classes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97 5-1-1 Class Declaration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98 5-1-2 Field Initialization . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98 5-1-3 Class Instantiation . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98 5-2 Namespaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100 5-2-1 Nesting Namespaces . . . . . . . . . . . . . . . . . . . . . . . . . . 100 5-2-2 The Namespace Alias Qualifier . . . . . . . . . . . . . . . . . . . . . 102 5-3 Access Levels . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103 5-4 Properties. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106 5-4-1 Using Properties. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107 5-4-2 Read-only Properties . . . . . . . . . . . . . . . . . . . . . . . . . . 108 5-4-3 Accessor Accessibility . . . . . . . . . . . . . . . . . . . . . . . . . 110 5-5 Static Members and Static Classes . . . . . . . . . . . . . . . . . . . . . . 110 5-6 Constants . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112 5-7 Constructors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113 5-7-1 Instance Constructors . . . . . . . . . . . . . . . . . . . . . . . . . . 114 5-7-1-1 Declaring Constructors . . . . . . . . . . . . . . . . . . . . . . 115 5-7-1-2 Using this . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115 5-7-2 Private Constructors . . . . . . . . . . . . . . . . . . . . . . . . . . . 116 5-7-3 Static Constructors . . . . . . . . . . . . . . . . . . . . . . . . . . . 116 5-8 Read-only Fields . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117 5-9 Inheritance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119 5-10 Destructors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121 5-11 Partial Classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126 Chapter 6 Function Members . . . . . . . . . . . . . . . . . . . . . . . . 129 6-1 Function Members . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129 6-2 Polymorphism . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130 6-2-1 Virtual and Override Methods. . . . . . . . . . . . . . . . . . . . . . 130 6-2-2 Calling Members of the Base Class . . . . . . . . . . . . . . . . . . . 131 6-2-3 Overriding Virtual Methods on the Base Class . . . . . . . . . . . . . 132 6-3 Abstract Classes and Methods . . . . . . . . . . . . . . . . . . . . . . . . 136 6-4 Method Overloading . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138 6-5 Passing Parameters to Methods. . . . . . . . . . . . . . . . . . . . . . . . 140 6-6 Various Ways to Pass Parameters to Methods . . . . . . . . . . . . . . . . 143 6-6-1 Using ref . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143 6-6-2 Using out . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144 6-6-3 Using params . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145 6-7 Indexers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148 6-8 User-defined Operators. . . . . . . . . . . . . . . . . . . . . . . . . . . . 150 Contents | ix 6-9 Overriding the ToString Method . . . . . . . . . . . . . . . . . . . . . . . 152 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154 Chapter 7 Structs, Enums, and Attributes . . . . . . . . . . . . . . . . . . 155 7-1 Structs vs. Classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155 7-2 Declaring and Using Structs . . . . . . . . . . . . . . . . . . . . . . . . . 156 7-3 Passing Structs and Classes to Methods . . . . . . . . . . . . . . . . . . . 160 7-4 Enumerations. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162 7-4-1 Declaring Enumerations. . . . . . . . . . . . . . . . . . . . . . . . . 162 7-4-2 Using Enumerations. . . . . . . . . . . . . . . . . . . . . . . . . . . 163 7-4-3 Using .NET Methods with enums . . . . . . . . . . . . . . . . . . . . 164 7-5 Attributes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 166 7-5-1 Attribute Parameters . . . . . . . . . . . . . . . . . . . . . . . . . . 168 7-5-2 The Conditional Attribute . . . . . . . . . . . . . . . . . . . . . . . . 168 7-5-3 Combining Attributes . . . . . . . . . . . . . . . . . . . . . . . . . . 169 7-5-4 Calling Native Functions . . . . . . . . . . . . . . . . . . . . . . . . 170 7-5-5 Emulating Unions . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174 Chapter 8 Interfaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . 175 8-1 What Is an Interface?. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 175 8-2 Declaring an Interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . 176 8-3 Interface Implementation. . . . . . . . . . . . . . . . . . . . . . . . . . . 177 8-4 Explicit Interface Implementation . . . . . . . . . . . . . . . . . . . . . . 179 8-5 Using is to Test Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182 8-6 Using as to Test Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184 8-7 Hiding Members of the Base Class. . . . . . . . . . . . . . . . . . . . . . 185 8-8 Versioning . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 186 8-9 Hiding Interface Members . . . . . . . . . . . . . . . . . . . . . . . . . . 189 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192 Chapter 9 Exceptions. . . . . . . . . . . . . . . . . . . . . . . . . . . . 193 9-1 Errors and Exceptions . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193 9-2 Throwing an Exception . . . . . . . . . . . . . . . . . . . . . . . . . . . 194 9-3 Catching an Exception . . . . . . . . . . . . . . . . . . . . . . . . . . . . 197 9-3-1 Organizing the Handlers. . . . . . . . . . . . . . . . . . . . . . . . . 199 9-3-2 Sequence of Events in Handling Exceptions . . . . . . . . . . . . . . 201 9-4 Expected Exceptions in File Processing . . . . . . . . . . . . . . . . . . . 205 9-4-1 Reading Text Files . . . . . . . . . . . . . . . . . . . . . . . . . . . 205 9-4-2 Writing and Appending Text Files . . . . . . . . . . . . . . . . . . . 206 9-4-3 Expected Exceptions . . . . . . . . . . . . . . . . . . . . . . . . . . 206 9-5 The finally Block. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 208 9-5-1 The try-finally Statement . . . . . . . . . . . . . . . . . . . . . . . . 208 9-5-2 The try-catch-finally Statement . . . . . . . . . . . . . . . . . . . . . 210 9-6 User-defined Exceptions . . . . . . . . . . . . . . . . . . . . . . . . . . . 212 9-7 Rethrowing Exceptions. . . . . . . . . . . . . . . . . . . . . . . . . . . . 214

See more

The list of books you might like

Most books are stored in the elastic cloud where traffic is expensive. For this reason, we have a limit on daily download.