Visual C# How to Program, Global Edition

Höfundar: Paul Deitel; Harvey Deitel (Útgáfa: 6)
Visual C# How to Program, Global Edition

Kaup valmöguleikar

The full text downloaded to your computer With eBooks you can: search for key concepts, words and phrases make highlights and notes as you study share your notes with friends eBooks are downloaded to your computer and accessible either offline through the Bookshelf (available as a free download), available online and also via the iPad and Android apps. Upon purchase, you'll gain instant access to this eBook.

Time limit The eBooks products do not have an expiry date. You will continue to access your digital ebook products whilst you have your Bookshelf installed. For all basic-to-intermediate level courses in Visual C# programming. An informative, engaging, challenging and entertaining introduction to Visual C# Created by world-renowned programming instructors Paul and Harvey Deitel, Visual C# How to Program, 6th Edition introduces  students to the world of desktop, mobile and web app development with Microsoft’s® Visual C#® programming language.

Students will use the. NET platform and the Visual Studio® Integrated Development Environment to write, test, and debug applications and run them on a wide variety of Windows® devices. At the heart of the book is the Deitel signature live-code approach—rather than using code snippets, the authors present concepts in the context of complete working programs followed by sample executions. Students begin by getting comfortable with the Visual Studio Community edition IDE and basic C# syntax.

Next, they build their skills one step at a time, mastering control structures, classes, objects, methods, variables, arrays, and the core techniques of object-oriented programming. With this strong foundation in place, the authors introduce more sophisticated techniques, including searching, sorting, data structures, generics, and collections. Additional practice is provided through a broad range of example programs and exercises selected from computer science, business, education, social issues, personal utilities, sports, mathematics, puzzles, simulation, game playing, graphics, multimedia and many other areas.

Nánar um bókina

Útgefandi
Pearson International Content
ISBN
9781292153513
Print ISBN
9781292153469
Format
Page Fidelity (PDF)
Útgáfa
6
Höfundar
Paul Deitel; Harvey Deitel
Tungumál
English
Útgefið
2020-07-03
Prent takmörkun á líftíma
100
Prent takmörkun
2
Afritunar takmörkun
2

Kaflar

  • Title Page
  • Copyright Page
  • Contents
  • Preface
  • Before You Begin
  • 1 Introduction to Computers, the Internet and Visual C# 41
  • 1.1 Introduction 42
  • 1.2 Computers and the Internet in Industry and Research 42
  • 1.3 Hardware and Software 45
  • 1.3.1 Moore’s Law 45
  • 1.3.2 Computer Organization 46
  • 1.4 Data Hierarchy 47
  • 1.5 Machine Languages, Assembly Languages and High-Level Languages 50
  • 1.6 Object Technology 51
  • 1.7 Internet and World Wide Web 53
  • 1.8 C# 55
  • 1.8.1 Object-Oriented Programming 56
  • 1.8.2 Event-Driven Programming 56
  • 1.8.3 Visual Programming 56
  • 1.8.4 Generic and Functional Programming 56
  • 1.8.5 An International Standard 57
  • 1.8.6 C# on Non-Windows Platforms 57
  • 1.8.7 Internet and Web Programming 57
  • 1.8.8 Asynchronous Programming with async and await 57
  • 1.8.9 Other Key Programming Languages 58
  • 1.9 Microsoft’s .NET 60
  • 1.9.1 .NET Framework 60
  • 1.9.2 Common Language Runtime 60
  • 1.9.3 Platform Independence 61
  • 1.9.4 Language Interoperability 61
  • 1.10 Microsoft’s Windows® Operating System 61
  • 1.11 Visual Studio Integrated Development Environment 63
  • 1.12 Painter Test-Drive in Visual Studio Community 63
  • 2 Introduction to Visual Studio and Visual Programming 73
  • 2.1 Introduction 74
  • 2.2 Overview of the Visual Studio Community 2015 IDE 74
  • 2.2.1 Introduction to Visual Studio Community 2015 74
  • 2.2.2 Visual Studio Themes 75
  • 2.2.3 Links on the Start Page 75
  • 2.2.4 Creating a New Project 76
  • 2.2.5 New Project Dialog and Project Templates 77
  • 2.2.6 Forms and Controls 78
  • 2.3 Menu Bar and Toolbar 79
  • 2.4 Navigating the Visual Studio IDE 82
  • 2.4.1 Solution Explorer 83
  • 2.4.2 Toolbox 84
  • 2.4.3 Properties Window 84
  • 2.5 Help Menu and Context-Sensitive Help 86
  • 2.6 Visual Programming: Creating a Simple App that Displays Text and an Image 87
  • 2.7 Wrap-Up 96
  • 2.8 Web Resources 97
  • 3 Introduction to C# App Programming 105
  • 3.1 Introduction 106
  • 3.2 Simple App: Displaying a Line of Text 106
  • 3.2.1 Comments 107
  • 3.2.2 using Directive 108
  • 3.2.3 Blank Lines and Whitespace 109
  • 3.2.4 Class Declaration 109
  • 3.2.5 Main Method 111
  • 3.2.6 Displaying a Line of Text 111
  • 3.2.7 Matching Left ({) and Right (}) Braces 112
  • 3.3 Creating a Simple App in Visual Studio 112
  • 3.3.1 Creating the Console App 112
  • 3.3.2 Changing the Name of the App File 114
  • 3.3.3 Writing Code and Using IntelliSense 114
  • 3.3.4 Compiling and Running the App 116
  • 3.3.5 Errors, Error Messages and the Error List Window 117
  • 3.4 Modifying Your Simple C# App 117
  • 3.4.1 Displaying a Single Line of Text with Multiple Statements 118
  • 3.4.2 Displaying Multiple Lines of Text with a Single Statement 118
  • 3.5 String Interpolation 120
  • 3.6 Another C# App: Adding Integers 121
  • 3.6.1 Declaring the int Variable number1 122
  • 3.6.2 Declaring Variables number2 and sum 123
  • 3.6.3 Prompting the User for Input 123
  • 3.6.4 Reading a Value into Variable number1 123
  • 3.6.5 Prompting the User for Input and Reading a Value into number2 124
  • 3.6.6 Summing number1 and number2 124
  • 3.6.7 Displaying the sum with string Interpolation 125
  • 3.6.8 Performing Calculations in Output Statements 125
  • 3.7 Memory Concepts 125
  • 3.8 Arithmetic 126
  • 3.8.1 Arithmetic Expressions in Straight-Line Form 127
  • 3.8.2 Parentheses for Grouping Subexpressions 127
  • 3.8.3 Rules of Operator Precedence 127
  • 3.8.4 Sample Algebraic and C# Expressions 128
  • 3.8.5 Redundant Parentheses 129
  • 3.9 Decision Making: Equality and Relational Operators 129
  • 3.10 Wrap-Up 134
  • 4 Introduction to Classes, Objects, Methods and strings 146
  • 4.1 Introduction 147
  • 4.2 Test-Driving an Account Class 148
  • 4.2.1 Instantiating an Object—Keyword new 148
  • 4.2.2 Calling Class Account’s GetName Method 149
  • 4.2.3 Inputting a Name from the User 149
  • 4.2.4 Calling Class Account’s SetName Method 150
  • 4.3 Account Class with an Instance Variable and Set and Get Methods 150
  • 4.3.1 Account Class Declaration 150
  • 4.3.2 Keyword class and the Class Body 151
  • 4.3.3 Instance Variable name of Type string 151
  • 4.3.4 SetName Method 152
  • 4.3.5 GetName Method 154
  • 4.3.7 Account UML Class Diagram 155
  • 4.4 Creating, Compiling and Running a Visual C# Project with Two Classes 156
  • 4.5 Software Engineering with Set and Get Methods 157
  • 4.6 Account Class with a Property Rather Than Set and Get Methods 158
  • 4.6.1 Class AccountTest Using Account’s Name Property 158
  • 4.6.2 Account Class with an Instance Variable and a Property 160
  • 4.6.3 Account UML Class Diagram with a Property 162
  • 4.7 Auto-Implemented Properties 162
  • 4.8 Account Class: Initializing Objects with Constructors 163
  • 4.8.1 Declaring an Account Constructor for Custom Object Initialization 163
  • 4.8.2 Class AccountTest: Initializing Account Objects When They’re Created 164
  • 4.9 Account Class with a Balance; Processing Monetary Amounts 166
  • 4.9.1 Account Class with a decimal balance Instance Variable 166
  • 4.9.2 AccountTest Class That Uses Account Objects with Balances 169
  • 4.10 Wrap-Up 173
  • 5 Algorithm Development and Control Statements: Part 1 182
  • 5.1 Introduction 183
  • 5.2 Algorithms 184
  • 5.3 Pseudocode 184
  • 5.4 Control Structures 185
  • 5.4.1 Sequence Structure 185
  • 5.4.2 Selection Statements 186
  • 5.4.3 Iteration Statements 187
  • 5.4.4 Summary of Control Statements 187
  • 5.5 if Single-Selection Statement 187
  • 5.6 if…else Double-Selection Statement 188
  • 5.6.1 Nested if…else Statements 189
  • 5.6.2 Dangling-else Problem 191
  • 5.6.3 Blocks 191
  • 5.6.4 Conditional Operator (?:) 192
  • 5.7 Student Class: Nested if…else Statements 193
  • 5.8 while Iteration Statement 196
  • 5.9 Formulating Algorithms: Counter-Controlled Iteration 197
  • 5.9.1 Pseudocode Algorithm with Counter-Controlled Iteration 197
  • 5.9.2 Implementing Counter-Controlled Iteration 198
  • 5.9.3 Integer Division and Truncation 200
  • 5.10 Formulating Algorithms: Sentinel-Controlled Iteration 201
  • 5.10.1 Top-Down, Stepwise Refinement: The Top and First Refinement 201
  • 5.10.2 Second Refinement 202
  • 5.10.3 Implementing Sentinel-Controlled Iteration 204
  • 5.10.4 Program Logic for Sentinel-Controlled Iteration 205
  • 5.10.5 Braces in a while Statement 206
  • 5.10.6 Converting Between Simple Types Explicitly and Implicitly 206
  • 5.10.7 Formatting Floating-Point Numbers 207
  • 5.11 Formulating Algorithms: Nested Control Statements 208
  • 5.11.1 Problem Statement 208
  • 5.11.2 Top-Down, Stepwise Refinement: Pseudocode Representation of the Top 209
  • 5.11.3 Top-Down, Stepwise Refinement: First Refinement 209
  • 5.11.4 Top-Down, Stepwise Refinement: Second Refinement 209
  • 5.11.5 Complete Second Refinement of the Pseudocode 210
  • 5.11.6 App That Implements the Pseudocode Algorithm 211
  • 5.12 Compound Assignment Operators 213
  • 5.13 Increment and Decrement Operators 213
  • 5.13.1 Prefix Increment vs. Postfix Increment 214
  • 5.13.2 Simplifying Increment Statements 215
  • 5.13.3 Operator Precedence and Associativity 216
  • 5.14 Simple Types 216
  • 5.15 Wrap-Up 217
  • 6 Control Statements: Part 2 232
  • 6.1 Introduction 233
  • 6.2 Essentials of Counter-Controlled Iteration 233
  • 6.3 for Iteration Statement 235
  • 6.3.1 A Closer Look at the for Statement’s Header 236
  • 6.3.2 General Format of a for Statement 236
  • 6.3.3 Scope of a for Statement’s Control Variable 236
  • 6.3.4 Expressions in a for Statement’s Header Are Optional 237
  • 6.3.5 Placing Arithmetic Expressions in a for Statement’s Header 237
  • 6.3.6 Using a for Statement’s Control Variable in the Statement’s Body 238
  • 6.3.7 UML Activity Diagram for the for Statement 238
  • 6.4 Examples Using the for Statement 238
  • 6.5 App: Summing Even Integers 239
  • 6.6 App: Compound-Interest Calculations 240
  • 6.6.1 Performing the Interest Calculations with Math Method pow 241
  • 6.6.2 Formatting with Field Widths and Alignment 242
  • 6.6.3 Caution: Do Not Use float or double for Monetary Amounts 243
  • 6.7 do…while Iteration Statement 244
  • 6.8 switch Multiple-Selection Statement 245
  • 6.8.1 Using a switch Statement to Count A, B, C, D and F Grades. 245
  • 6.8.2 switch Statement UML Activity Diagram 249
  • 6.8.3 Notes on the Expression in Each case of a switch 250
  • 6.9 Class AutoPolicy Case Study: strings in switch Statements 251
  • 6.10 break and continue Statements 253
  • 6.10.1 break Statement 253
  • 6.10.2 continue Statement 254
  • 6.11 Logical Operators 255
  • 6.11.1 Conditional AND (&&) Operator 256
  • 6.11.2 Conditional OR (||) Operator 256
  • 6.11.3 Short-Circuit Evaluation of Complex Conditions 257
  • 6.11.4 Boolean Logical AND (&) and Boolean Logical OR (|) Operators 257
  • 6.11.5 Boolean Logical Exclusive OR (^) 258
  • 6.11.6 Logical Negation (!) Operator 258
  • 6.11.7 Logical Operators Example 259
  • 6.12 Structured-Programming Summary 261
  • 6.13 Wrap-Up 266
  • 7 Methods: A Deeper Look 277
  • 7.1 Introduction 278
  • 7.2 Packaging Code in C# 279
  • 7.2.1 Modularizing Programs 279
  • 7.2.2 Calling Methods 280
  • 7.3 static Methods, static Variables and Class Math 280
  • 7.3.1 Math Class Methods 281
  • 7.3.2 Math Class Constants PI and E 282
  • 7.3.3 Why Is Main Declared static? 282
  • 7.3.4 Additional Comments About Main 283
  • 7.4 Methods with Multiple Parameters 283
  • 7.4.1 Keyword static 285
  • 7.4.2 Method Maximum 285
  • 7.4.3 Assembling strings with Concatenation 285
  • 7.4.4 Breaking Apart Large string Literals 286
  • 7.4.5When to Declare Variables as Fields 287
  • 7.4.6 Implementing Method Maximum by Reusing Method Math.Max 287
  • 7.5 Notes on Using Methods 287
  • 7.6 Argument Promotion and Casting 288
  • 7.6.1 Promotion Rules 289
  • 7.6.2 Sometimes Explicit Casts Are Required 289
  • 7.7 The .NET Framework Class Library 290
  • 7.8 Case Study: Random-Number Generation 292
  • 7.8.1 Creating an Object of Type Random 292
  • 7.8.2 Generating a Random Integer 292
  • 7.8.3 Scaling the Random-Number Range 293
  • 7.8.4 Shifting Random-Number Range 293
  • 7.8.5 Combining Shifting and Scaling 293
  • 7.8.6 Rolling a Six-Sided Die 293
  • 7.8.7 Scaling and Shifting Random Numbers 296
  • 7.8.8 Repeatability for Testing and Debugging 297
  • 7.9 Case Study: A Game of Chance; Introducing Enumerations 297
  • 7.9.1 Method RollDice 300
  • 7.9.2 Method Main’s Local Variables 300
  • 7.9.3 enum Type Status 301
  • 7.9.4 The First Roll 301
  • 7.9.5 enum Type DiceNames 301
  • 7.9.6 Underlying Type of an enum 301
  • 7.9.7 Comparing Integers and enum Constants 302
  • 7.10 Scope of Declarations 302
  • 7.11 Method-Call Stack and Activation Records 305
  • 7.11.1 Method-Call Stack 305
  • 7.11.2 Stack Frames 305
  • 7.11.3 Local Variables and Stack Frames 306
  • 7.11.4 Stack Overflow 306
  • 7.11.5 Method-Call Stack in Action 306
  • 7.12 Method Overloading 309
  • 7.12.1 Declaring Overloaded Methods 309
  • 7.12.2 Distinguishing Between Overloaded Methods 310
  • 7.12.3 Return Types of Overloaded Methods 311
  • 7.13 Optional Parameters 311
  • 7.14 Named Parameters 312
  • 7.15 C# 6 Expression-Bodied Methods and Properties 313
  • 7.16 Recursion 314
  • 7.16.1 Base Cases and Recursive Calls 314
  • 7.16.2 Recursive Factorial Calculations 314
  • 7.16.3 Implementing Factorial Recursively 315
  • 7.17 Value Types vs. Reference Types 317
  • 7.18 Passing Arguments By Value and By Reference 318
  • 7.18.1 ref and out Parameters 319
  • 7.18.2 Demonstrating ref, out and Value Parameters 320
  • 7.19 Wrap-Up 322
  • 8 Arrays; Introduction to Exception Handling 339
  • 8.1 Introduction 340
  • 8.2 Arrays 341
  • 8.3 Declaring and Creating Arrays 342
  • 8.4 Examples Using Arrays 343
  • 8.4.1 Creating and Initializing an Array 343
  • 8.4.2 Using an Array Initializer 344
  • 8.4.3 Calculating a Value to Store in Each Array Element 345
  • 8.4.4 Summing the Elements of an Array 347
  • 8.4.5 Iterating Through Arrays with foreach 347
  • 8.4.6 Using Bar Charts to Display Array Data Graphically; Introducing Type Inference with var 349
  • 8.4.7 Using the Elements of an Array as Counters 352
  • 8.5 Using Arrays to Analyze Survey Results; Intro to Exception Handling 353
  • 8.5.1 Summarizing the Results 354
  • 8.5.2 Exception Handling: Processing the Incorrect Response 355
  • 8.5.3 The try Statement 355
  • 8.5.4 Executing the catch Block 355
  • 8.5.5 Message Property of the Exception Parameter 356
  • 8.6 Case Study: Card Shuffling and Dealing Simulation 356
  • 8.6.1 Class Card and Getter-Only Auto-Implemented Properties 356
  • 8.6.2 Class DeckOfCards 357
  • 8.6.3 Shuffling and Dealing Cards 360
  • 8.7 Passing Arrays and Array Elements to Methods 361
  • 8.8 Case Study: GradeBook Using an Array to Store Grades 363
  • 8.9 Multidimensional Arrays 369
  • 8.9.1 Rectangular Arrays 369
  • 8.9.2 Jagged Arrays 370
  • 8.9.3 Two-Dimensional Array Example: Displaying Element Values 371
  • 8.10 Case Study: GradeBook Using a Rectangular Array 374
  • 8.11 Variable-Length Argument Lists 380
  • 8.12 Using Command-Line Arguments 382
  • 8.13 (Optional) Passing Arrays by Value and by Reference 384
  • 8.14 Wrap-Up 388
  • 9 Introduction to LINQ and the List Collection 410
  • 9.1 Introduction 411
  • 9.2 Querying an Array of int Values Using LINQ 412
  • 9.2.1 The from Clause 414
  • 9.2.2 The where Clause 415
  • 9.2.3 The select Clause 415
  • 9.2.4 Iterating Through the Results of the LINQ Query 415
  • 9.2.5 The orderby Clause 415
  • 9.2.6 Interface IEnumerable 416
  • 9.3 Querying an Array of Employee Objects Using LINQ 416
  • 9.3.1 Accessing the Properties of a LINQ Query’s Range Variable 420
  • 9.3.2 Sorting a LINQ Query’s Results by Multiple Properties 420
  • 9.3.3 Any, First and Count Extension Methods 420
  • 9.3.4 Selecting a Property of an Object 420
  • 9.3.5 Creating New Types in the select Clause of a LINQ Query 420
  • 9.4 Introduction to Collections 421
  • 9.4.1 List Collection 421
  • 9.4.2 Dynamically Resizing a List Collection 422
  • 9.5 Querying the Generic List Collection Using LINQ 426
  • 9.5.1 The let Clause 428
  • 9.5.2 Deferred Execution 428
  • 9.5.3 Extension Methods ToArray and ToList 428
  • 9.5.4 Collection Initializers 428
  • 9.6 Wrap-Up 429
  • 9.7 Deitel LINQ Resource Center 429
  • 10 Classes and Objects: A Deeper Look 434
  • 10.1 Introduction 435
  • 10.2 Time Class Case Study; Throwing Exceptions 435
  • 10.2.1 Time1 Class Declaration 436
  • 10.2.2 Using Class Time1 437
  • 10.3 Controlling Access to Members 439
  • 10.4 Referring to the Current Object’s Members with the this Reference 440
  • 10.5 Time Class Case Study: Overloaded Constructors 442
  • 10.5.1 Class Time2 with Overloaded Constructors 442
  • 10.5.2 Using Class Time2’s Overloaded Constructors 446
  • 10.6 Default and Parameterless Constructors 448
  • 10.7 Composition 449
  • 10.7.1 Class Date 449
  • 10.7.2 Class Employee 451
  • 10.7.3 Class EmployeeTest 452
  • 10.8 Garbage Collection and Destructors 453
  • 10.9 static Class Members 453
  • 10.10 readonly Instance Variables 457
  • 10.11 Class View and Object Browser 458
  • 10.11.1 Using the Class View Window 458
  • 10.11.2 Using the Object Browser 459
  • 10.12 Object Initializers 460
  • 10.13 Operator Overloading; Introducing struct 460
  • 10.13.1 Creating Value Types with struct 461
  • 10.13.2 Value Type ComplexNumber 461
  • 10.13.3 Class ComplexTest 463
  • 10.14 Time Class Case Study: Extension Methods 464
  • 10.15 Wrap-Up 467
  • 11 Object-Oriented Programming: Inheritance 475
  • 11.1 Introduction 476
  • 11.2 Base Classes and Derived Classes 477
  • 11.3 protected Members 479
  • 11.4 Relationship between Base Classes and Derived Classes 480
  • 11.4.1 Creating and Using a CommissionEmployee Class 481
  • 11.4.2 Creating a BasePlusCommissionEmployee Class without Using Inheritance 485
  • 11.4.3 Creating a CommissionEmployee–BasePlusCommissionEmployee Inheritance Hierarchy 490
  • 11.4.4 CommissionEmployee–BasePlusCommissionEmployee Inheritance Hierarchy Using protected Instanc
  • 11.4.5 CommissionEmployee–BasePlusCommissionEmployee Inheritance Hierarchy Using private Instance
  • 11.5 Constructors in Derived Classes 500
  • 11.6 Software Engineering with Inheritance 500
  • 11.7 Class object 501
  • 11.8 Wrap-Up 502
  • 12 OOP: Polymorphism and Interfaces 508
  • 12.1 Introduction 509
  • 12.2 Polymorphism Examples 511
  • 12.3 Demonstrating Polymorphic Behavior 512
  • 12.4 Abstract Classes and Methods 515
  • 12.5 Case Study: Payroll System Using Polymorphism 517
  • 12.5.1 Creating Abstract Base Class Employee 518
  • 12.5.2 Creating Concrete Derived Class SalariedEmployee 520
  • 12.5.3 Creating Concrete Derived Class HourlyEmployee 522
  • 12.5.4 Creating Concrete Derived Class CommissionEmployee 523
  • 12.5.5 Creating Indirect Concrete Derived Class BasePlusCommissionEmployee 525
  • 12.5.6 Polymorphic Processing, Operator is and Downcasting 526
  • 12.5.7 Summary of the Allowed Assignments Between Base-Class and Derived-Class Variables 531
  • 12.6 sealed Methods and Classes 532
  • 12.7 Case Study: Creating and Using Interfaces 533
  • 12.7.1 Developing an IPayable Hierarchy 534
  • 12.7.2 Declaring Interface IPayable 536
  • 12.7.3 Creating Class Invoice 536
  • 12.7.4 Modifying Class Employee to Implement Interface IPayable 538
  • 12.7.5 Using Interface IPayable to Process Invoices and Employees Polymorphically 539
  • 12.7.6 Common Interfaces of the .NET Framework Class Library 541
  • 12.8 Wrap-Up 542
  • 13 Exception Handling: A Deeper Look 547
  • 13.1 Introduction 548
  • 13.2 Example: Divide by Zero without Exception Handling 549
  • 13.2.1 Dividing By Zero 550
  • 13.2.2 Enter a Non-Numeric Denominator 551
  • 13.2.3 Unhandled Exceptions Terminate the App 552
  • 13.3 Example: Handling DivideByZeroExceptions and FormatExceptions 552
  • 13.3.1 Enclosing Code in a try Block 554
  • 13.3.2 Catching Exceptions 554
  • 13.3.3 Uncaught Exceptions 555
  • 13.3.4 Termination Model of Exception Handling 556
  • 13.3.5 Flow of Control When Exceptions Occur 556
  • 13.4 .NET Exception Hierarchy 557
  • 13.4.1 Class SystemException 557
  • 13.4.2 Which Exceptions Might a Method Throw? 558
  • 13.5 finally Block 559
  • 13.5.1 Moving Resource-Release Code to a finally Block 559
  • 13.5.2 Demonstrating the finally Block 560
  • 13.5.3 Throwing Exceptions Using the throw Statement 564
  • 13.5.4 Rethrowing Exceptions 564
  • 13.5.5 Returning After a finally Block 565
  • 13.6 The using Statement 566
  • 13.7 Exception Properties 567
  • 13.7.1 Property InnerException 567
  • 13.7.2 Other Exception Properties 568
  • 13.7.3 Demonstrating Exception Properties and Stack Unwinding 568
  • 13.7.4 Throwing an Exception with an InnerException 570
  • 13.7.5 Displaying Information About the Exception 571
  • 13.8 User-Defined Exception Classes 571
  • 13.9 Checking for null References; Introducing C# 6’s?. Operator 575
  • 13.9.1 Null-Conditional Operator (?.) 575
  • 13.9.2 Revisiting Operators is and as 576
  • 13.9.3 Nullable Types 576
  • 13.9.4 Null Coalescing Operator (??) 577
  • 13.10 Exception Filters and the C# 6 when Clause 577
  • 13.11 Wrap-Up 578
  • 14 Graphical User Interfaces with Windows Forms: Part 1 584
  • 14.1 Introduction 585
  • 14.2 Windows Forms 586
  • 14.3 Event Handling 588
  • 14.3.1 A Simple Event-Driven GUI 589
  • 14.3.2 Auto-Generated GUI Code 591
  • 14.3.3 Delegates and the Event-Handling Mechanism 593
  • 14.3.4 Another Way to Create Event Handlers 594
  • 14.3.5 Locating Event Information 595
  • 14.4 Control Properties and Layout 596
  • 14.4.1 Anchoring and Docking 597
  • 14.4.2 Using Visual Studio To Edit a GUI’s Layout 599
  • 14.5 Labels, TextBoxes and Buttons 600
  • 14.6 GroupBoxes and Panels 603
  • 14.7 CheckBoxes and RadioButtons 606
  • 14.7.1 CheckBoxes 606
  • 14.7.2 Combining Font Styles with Bitwise Operators 608
  • 14.7.3 RadioButtons 609
  • 14.8 PictureBoxes 614
  • 14.9 ToolTips 617
  • 14.10 NumericUpDown Control 618
  • 14.11 Mouse-Event Handling 621
  • 14.12 Keyboard-Event Handling 623
  • 14.13 Wrap-Up 627
  • 15 Graphical User Interfaces with Windows Forms: Part 2 637
  • 15.1 Introduction 638
  • 15.2 Menus 638
  • 15.3 MonthCalendar Control 648
  • 15.4 DateTimePicker Control 649
  • 15.5 LinkLabel Control 652
  • 15.6 ListBox Control 655
  • 15.7 CheckedListBox Control 660
  • 15.8 ComboBox Control 663
  • 15.9 TreeView Control 667
  • 15.10 ListView Control 673
  • 15.11 TabControl Control 679
  • 15.12 Multiple Document Interface (MDI) Windows 683
  • 15.13 Visual Inheritance 691
  • 15.14 User-Defined Controls 696
  • 15.15 Wrap-Up 699
  • 16 Strings and Characters: A Deeper Look 707
  • 16.1 Introduction 708
  • 16.2 Fundamentals of Characters and Strings 709
  • 16.3 string Constructors 710
  • 16.4 string Indexer, Length Property and CopyTo Method 711
  • 16.5 Comparing strings 712
  • 16.6 Locating Characters and Substrings in strings 716
  • 16.7 Extracting Substrings from strings 719
  • 16.8 Concatenating strings 720
  • 16.9 Miscellaneous string Methods 720
  • 16.10 Class StringBuilder 722
  • 16.11 Length and Capacity Properties, EnsureCapacity Method and Indexer of Class StringBuilder 723
  • 16.12 Append and AppendFormat Methods of Class StringBuilder 725
  • 16.13 Insert, Remove and Replace Methods of Class StringBuilder 727
  • 16.14 Char Methods 730
  • 16.15 Introduction to Regular Expressions (Online) 732
  • 16.16 Wrap-Up 732
  • 17 Files and Streams 739
  • 17.1 Introduction 740
  • 17.2 Files and Streams 740
  • 17.3 Creating a Sequential-Access Text File 741
  • 17.4 Reading Data from a Sequential-Access Text File 750
  • 17.5 Case Study: Credit-Inquiry Program 754
  • 17.6 Serialization 759
  • 17.7 Creating a Sequential-Access File Using Object Serialization 760
  • 17.8 Reading and Deserializing Data from a Binary File 764
  • 17.9 Classes File and Directory 767
  • 17.9.1 Demonstrating Classes File and Directory 768
  • 17.9.2 Searching Directories with LINQ 771
  • 17.10 Wrap-Up 775
  • 18 Searching and Sorting 782
  • 18.1 Introduction 783
  • 18.2 Searching Algorithms 784
  • 18.2.1 Linear Search 784
  • 18.2.2 Binary Search 788
  • 18.3 Sorting Algorithms 792
  • 18.3.1 Selection Sort 793
  • 18.3.2 Insertion Sort 796
  • 18.3.3 Merge Sort 800
  • 18.4 Summary of the Efficiency of Searching and Sorting Algorithms 806
  • 18.5 Wrap-Up 807
  • 19 Custom Linked Data Structures 812
  • 19.1 Introduction 813
  • 19.2 Simple-Type structs, Boxing and Unboxing 813
  • 19.3 Self-Referential Classes 814
  • 19.4 Linked Lists 815
  • 19.5 Stacks 828
  • 19.6 Queues 832
  • 19.7 Trees 835
  • 19.7.1 Binary Search Tree of Integer Values 836
  • 19.7.2 Binary Search Tree of IComparable Objects 843
  • 19.8 Wrap-Up 849
  • 20 Generics 855
  • 20.1 Introduction 856
  • 20.2 Motivation for Generic Methods 857
  • 20.3 Generic-Method Implementation 859
  • 20.4 Type Constraints 862
  • 20.4.1 IComparable Interface 862
  • 20.4.2 Specifying Type Constraints 862
  • 20.5 Overloading Generic Methods 865
  • 20.6 Generic Classes 865
  • 20.7 Wrap-Up 875
  • 21 Generic Collections; Functional Programming with LINQ/PLINQ 881
  • 21.1 Introduction 882
  • 21.2 Collections Overview 884
  • 21.3 Class Array and Enumerators 886
  • 21.3.1 C# 6 using static Directive 888
  • 21.3.2 Class UsingArray’s static Fields 889
  • 21.3.3 Array Method Sort 889
  • 21.3.4 Array Method Copy 889
  • 21.3.5 Array Method BinarySearch 889
  • 21.3.6 Array Method GetEnumerator and Interface IEnumerator 889
  • 21.3.7 Iterating Over a Collection with foreach 890
  • 21.3.8 Array Methods Clear, IndexOf, LastIndexOf and Reverse 890
  • 21.4 Dictionary Collections 890
  • 21.4.1 Dictionary Fundamentals 891
  • 21.4.2 Using the SortedDictionary Collection 892
  • 21.5 Generic LinkedList Collection 896
  • 21.6 C# 6 Null Conditional Operator ?[] 900
  • 21.7 C# 6 Dictionary Initializers and Collection Initializers 901
  • 21.8 Delegates 901
  • 21.8.1 Declaring a Delegate Type 903
  • 21.8.2 Declaring a Delegate Variable 903
  • 21.8.3 Delegate Parameters 904
  • 21.8.4 Passing a Method Name Directly to a Delegate Parameter 904
  • 21.9 Lambda Expressions 904
  • 21.9.1 Expression Lambdas 906
  • 21.9.2 Assigning Lambdas to Delegate Variables 907
  • 21.9.3 Explicitly Typed Lambda Parameters 907
  • 21.9.4 Statement Lambdas 907
  • 21.10 Introduction to Functional Programming 907
  • 21.11 Functional Programming with LINQ Method-Call Syntax and Lambdas 909
  • 21.11.1 LINQ Extension Methods Min, Max, Sum and Average 912
  • 21.11.2 Aggregate Extension Method for Reduction Operations 912
  • 21.11.3 The Where Extension Method for Filtering Operations 914
  • 21.11.4 Select Extension Method for Mapping Operations 915
  • 21.12 PLINQ: Improving LINQ to Objects Performance with Multicore 915
  • 21.13 (Optional) Covariance and Contravariance for Generic Types 919
  • 21.14 Wrap-Up 921
  • 22 Databases and LINQ 933
  • 22.1 Introduction 934
  • 22.2 Relational Databases 935
  • 22.3 A Books Database 936
  • 22.4 LINQ to Entities and the ADO.NET Entity Framework 940
  • 22.5 Querying a Database with LINQ 941
  • 22.5.1 Creating the ADO.NET Entity Data Model Class Library 943
  • 22.5.2 Creating a Windows Forms Project and Configuring It to Use the Entity Data Model 947
  • 22.5.3 Data Bindings Between Controls and the Entity Data Model 949
  • 22.6 Dynamically Binding Query Results 955
  • 22.6.1 Creating the Display Query Results GUI 956
  • 22.6.2 Coding the Display Query Results App 957
  • 22.7 Retrieving Data from Multiple Tables with LINQ 959
  • 22.8 Creating a Master/Detail View App 965
  • 22.8.1 Creating the Master/Detail GUI 965
  • 22.8.2 Coding the Master/Detail App 967
  • 22.9 Address Book Case Study 968
  • 22.9.1 Creating the Address Book App’s GUI 970
  • 22.9.2 Coding the Address Book App 971
  • 22.10 Tools and Web Resources 975
  • 22.11 Wrap-Up 975
  • 23 Asynchronous Programming with async and await 982
  • 23.1 Introduction 983
  • 23.2 Basics of async and await 985
  • 23.2.1 async Modifier 985
  • 23.2.2 await Expression 985
  • 23.2.3 async, await and Threads 985
  • 23.3 Executing an Asynchronous Task from a GUI App 986
  • 23.3.1 Performing a Task Asynchronously 986
  • 23.3.2 Method calculateButton_Click 988
  • 23.3.3 Task Method Run: Executing Asynchronously in a SeparateThread 989
  • 23.3.4 awaiting the Result 989
  • 23.3.5 Calculating the Next Fibonacci Value Synchronously 989
  • 23.4 Sequential Execution of Two Compute-Intensive Tasks 990
  • 23.5 Asynchronous Execution of Two Compute-Intensive Tasks 992
  • 23.5.1 awaiting Multiple Tasks with Task Method WhenAll 995
  • 23.5.2 Method StartFibonacci 996
  • 23.5.3 Modifying a GUI from a Separate Thread 996
  • 23.5.4 awaiting One of Several Tasks with Task Method WhenAny 996
  • 23.6 Invoking a Flickr Web Service Asynchronously with HttpClient 997
  • 23.6.1 Using Class HttpClient to Invoke a Web Service 1001
  • 23.6.2 Invoking the Flickr Web Service’s flickr.photos.search Method 1001
  • 23.6.3 Processing the XML Response 1002
  • 23.6.4 Binding the Photo Titles to the ListBox 1003
  • 23.6.5 Asynchronously Downloading an Image’s Bytes 1004
  • 23.7 Displaying an Asynchronous Task’s Progress 1004
  • 23.8 Wrap-Up 1008
  • Chapters on the Web
  • A Operator Precedence Chart 1016
  • B Simple Types 1018
  • C ASCII Character Set 1020
  • Appendices on the Web 1021
  • Index 1023
  • Symbols
  • Numerics
  • A
  • B
  • C
  • D
  • E
  • F
  • G
  • H
  • I
  • J
  • K
  • L
  • M
  • N
  • O
  • P
  • Q
  • R
  • S
  • T
  • U
  • V
  • W
  • X
  • Y
  • Z