There is a new edition of this C# book
It focuses on how to develop professional Windows Forms applications with C#. But along the way, it teaches the C# language and essential skills that are needed to build any C# application…for the desktop, the web, or mobile devices. And although this book is designed for introductory C# courses, it also works for object-oriented and database programming courses.
You are currently on the Murach site for instructors. To buy this book, please visit our retail site.
Best C# book ever. Murach manuals are precise and to the point, with lots and lots of examples. Highly recommended for beginners."
The 3 chapters of section 1 show your students how to use the Visual Studio IDE to develop Windows Forms applications…an approach that suits today’s visual learners by letting them see what they’re making. In particular, these chapters focus on the skills for designing forms and entering code. These are essential skills your students need to get the most out of Visual Studio.
The 8 chapters of section 2 present a professional subset of C# that includes all of the essential programming skills for developing business applications. That includes the best techniques for handling exceptions, validating data, coding control structures, working with arrays and collections, handling various types of data, and debugging applications.
The 5 chapters of section 3 present a professional set of skills for creating and using classes. The first chapter in this section, chapter 12, presents the basic skills every student should know. Because the other chapters present advanced skills, you may want to be selective about which of these chapters or portions of chapters you assign.
The 2 chapters of section 4 present skills for working with data outside of a database. To be specific, they show how to work with text and binary files, as well as how to use LINQ to query a data structure.
You can decide whether you want to cover the chapter on file I/O or whether to point to it as a reference if students ever need to work with files. But you’ll want to be sure to cover the chapter on LINQ before going on to EF Core in section 5.
The 4 chapters of section 5 present the essential skills for developing applications that work with databases. That includes using Entity Framework (EF) Core to work with the data in a relational database and using ADO.NET to provide the data access code. It also includes using the DataGridView control of the .NET Framework to display and manipulate database records in an application.
This is our C# essentials book that’s designed for introductory C# courses. But it also works for object-oriented and database programming courses, so you may want to consider it for a two- or three-course sequence.
For an introductory course, this book gives your students a realistic view of how Visual Studio and C# are used to develop Windows Forms applications. By the time your students complete chapter 7, for example, they will be able to develop tested, reliable applications that do data validation and exception handling. And by the time they complete chapter 12, they’ll be able to develop object-oriented applications.
For advanced courses, you’re really going to be hard-pressed to find a better book:
And because sections 3 through 5 are modular, you can teach them in whatever sequence you prefer.
After your students complete the first 12 chapters, you can go on to any other section of the book. This works because these sections are written as independent modules that require only the first 12 chapters as a prerequisite.
In addition, most of the chapters in sections 4 and 5 are independent of each other, so they can be taught in any order. That’s what we mean by modularity, and that lets you create the course that’s right for your students.
The main points here are that (1) you don’t need to teach the chapters in sequence and (2) you get to decide the focus of your course.
If, for example, you want to emphasize the complexities of object-oriented programming, assign all of section 3. If you want to emphasize database programming, assign chapter 18 and all of section 5. If you want to teach a course that introduces all aspects of programming, assign selected chapters from sections 3, 4, and 5.
That’s a complaint we sometimes hear, and we realize it may be an issue with an almost 800-page book!
Remember, though, that the modular structure of this book lets you assign just the content that you want for your course, whether it’s a beginning or advanced course. Remember too that all our books are priced fairly so students not only buy them but keep them for use on the job later on.
In fact, at $59.50 for the print edition, your students are likely to get their money back many times over in job opportunities and pay raises.
Like all our books, this one has features that you won’t find in competing books. That’s why we believe that your students will learn faster and better with our book than with any other. Here are just 3 of those features.
In you’ve been using an earlier edition, you’ll find it’s pretty easy to revise your course for this edition. That’s because C# is a mature product, so the content is very stable from one edition to another.
Still, there are always improvements to be made! So you can be sure that we’ve updated the content throughout to the latest releases of C#, Visual Studio, and .NET, with the most significant changes in the material on database programming.
The result: You can rely on this book to help you teach your students today’s best C# programming features and practices.
To develop the Windows Forms applications presented in this book, your students will need the following:
Although .NET is cross-platform, you can’t use macOS or Linux to develop Windows Forms applications like the ones shown in this book. You have to use Windows. And Windows 10 gives you the best performance with the latest editions of Visual Studio.
The Community edition of Visual Studio can be downloaded for free from Microsoft’s website, and it includes all of the components needed to work with this book:
Appendix A of the book shows your students how to install Visual Studio and its components on their own PCs.
“There are plenty of books on C# and the .NET framework. What sets this apart is the Murach style of teaching.
“I have a limited background as a programmer and I needed both an intro to a powerful language as well as a primer on the concepts of object-oriented programming. I have learned more in the 800+ pages of this book than I have reading half a dozen other books and hours of forum posts online.”
- Posted at an online bookseller
"Murach has yet again hit a home run! This book is laid out in such a way where the theory is on the left page and the ‘Cliff Notes’ version of the content is on the right side. It gets you from zero to Jr Dev knowledge in no time. After the fact, you can always use that right page as a great reference whilst in the middle of a project. Bravo again, guys."
- Brian Knight, Founder, Pragmatic Works, Florida
"This is probably the best textbook I have ever used. It covers C# programming from the ground up and is outstanding. Useful information is emphasized and each section contains a summary for reinforcement. I am learning very fast. I have also heard from computer science grads that this author produces the best texts on many other programming languages."
- Posted at an online bookseller
"This book is awesome! I recommend it anyone new to programming like myself. Loved how the author used forms to teach the language. It was good for me because I got to see what I was making."
- Posted at an online bookseller
"A notable feature of the book is that everything is done as a ‘How to,’ which is great when you are learning. This is the typical Murach approach to books, making them not just useful for learning but also as big cookbooks."
- David Bolton, Past Host of C/C++/C# for About.com (now on ThoughtCo.com)
"I have trouble reading books (boring and I'm lazy) - the 'paired pages' approach is really nice - give it a try."
- Posted at an online bookseller
"Just trying to learn a development language can be daunting, and you can spend hours trying to find the answer to rather straightforward questions, like working with arrays. This book brings it all together in a comprehensive manner that is easy to understand and follow."
- Hal Hayes, Capital Area .NET User Group
"I can't express how much this book helps with explaining everything in detail. If you are just starting out in C# programming, this is the book I would suggest getting."
- Posted at an online bookseller
View the table of contents for this book in a PDF: Table of Contents (PDF)
Click on any chapter title to display or hide its content.
.NET applications
Visual Studio and the .NET programming languages
The .NET Framework and .NET Core
The Visual Studio IDE
How a C# application is compiled and run
How to start Visual Studio
How to open or close an existing project
How to use the Form Designer
How to use the Code Editor
How to use the Solution Explorer
How to work with Visual Studio’s windows
How to change the .NET version used by a project
How to build a project
How to run a project
How to configure Visual Studio
How to create a new project
The design of the Invoice Total form
How to add controls to a form
How to set properties
Common properties for forms and controls
How to add navigation features
The property settings for the Invoice Total form
How to rename the files of a project
How to save the files of a project
Introduction to object-oriented programming
How to refer to properties, methods, and events
How an application responds to events
How to create an event handler for the default event of a form or control
How to delete an event handler
How IntelliSense helps you enter the code for a form
The event handlers for the Invoice Total form
How to detect and correct syntax errors
How to code with a readable style
How to code comments
How to work with the Text Editor toolbar
How to collapse or expand blocks of code
How to use code snippets
How to refactor code
How to get help information
How to run a project
How to test a project
How to debug runtime errors
The built-in value types
How to declare and initialize variables
How to declare and initialize constants
How to code arithmetic expressions
How to code assignment statements
How to work with the order of precedence
How to use casting
How to use the Math class
How to generate random numbers
How to declare and initialize a string
How to join and append strings
How to include special characters in strings
The .NET structures and classes that define data types
How to use methods to convert data types
How to use methods to convert numbers to formatted strings
How to work with scope
How to declare and use enumerations
How to work with nullable value types and the null-coalescing operators
The basic Invoice Total application
The enhanced Invoice Total application
How to use the relational operators
How to use the logical operators
How to code if-else statements
How to code switch statements
How to code switch expressions
How to use the conditional operator
An enhanced version of the Invoice Total application
How to code while and do-while loops
How to code for loops
Loops that use break and continue statements
Debugging techniques for programs with loops
The design and property settings for the form
The code for the form
How to code methods
How to call methods
How to use optional parameters
How to use named arguments
How to code expression-bodied methods
How to use refactoring to create a new method and its calling statement
When and how to pass arguments by reference and by value
How to create tuples and refer to their members
How to use a tuple as the return type for a method
How to generate an event handler for any event
How event wiring works
How to handle multiple events with one event handler
The event handlers and the CalculateFutureValue() method
Some of the generated code
How exceptions work
How to display a dialog box
How to catch an exception
How to use the properties and methods of an exception
How to catch specific types of exceptions
How to throw an exception
The Future Value application with exception handling
How to validate a single entry
How to code generic methods for data validation
How to validate multiple entries
The dialog boxes
The code
How to create an array
How to assign values to the elements of an array
How to work with arrays
How to use foreach loops to work with arrays
How to create a rectangular array
How to assign values to a rectangular array
How to work with rectangular arrays
How to create a jagged array
How to assign values to a jagged array
How to work with jagged arrays
How to use the Array class
How to refer to and copy arrays
How to code methods that work with arrays
How to use the null-conditional operator
More ways to refer to array elements
Commonly used collection classes
Typed vs. untyped collections
How to work with a list
How to work with a sorted list
How to work with queues and stacks
How to work with an array list
How to create a DateTime value
How to get the current date and time
How to format DateTime values
How to get information about dates and times
How to perform operations on dates and times
The properties and methods of the String class
Code examples that work with strings
More code examples that work with strings
How to use the Parse() and TryParse() methods to validate numeric entries
How to work with nullable reference types
How to use the StringBuilder class
How to format numbers
How to format dates and times
How to use interpolated strings
Five more types of controls
How to work with combo boxes and list boxes
How to work with check boxes and radio buttons
How to work with group boxes
How to use Tab Order view to set the tab order
How to get the information you need for using a control
How to add a form to a project
The code that’s generated for a new form
How to rename a form
How to display the first form of an application
How to display a form as a dialog box
How to pass data between a form and a custom dialog box
How to display a dialog box and get the user response
How to use the FormClosing event
The operation
The property settings
The code for the Customer form
The code for the Payment form
How to set the debugging options
How to work in break mode
How to use the Edit and Continue feature
How to work with data tips
How to use breakpoints
How to control the execution of an application
How to use the Locals window to monitor variables
How to use the Autos window to monitor variables
How to use Watch windows to monitor expressions
How to use the Immediate window to execute commands
How to use the Call Stack window to monitor called methods
How to use the Call Hierarchy window to navigate through your code
How to use the Output window to view project information
How to write data to the Output window
How to use the Visualizer dialog boxes to view strings
How classes can be used to structure an application
The members you can define within a class
The code for the Product class
How instantiation works
How to add a class file to a project
How to code fields
How to code properties
How to code methods
How to code constructors
How to code static members
The operation of the Product Maintenance application
The classes used by the Product Maintenance application
The code for the Product Maintenance application
How to code auto-implemented properties
How to code expression-bodied properties and accessors
How to code expression-bodied methods and constructors
How to use pattern matching
How to use property patterns
How to generate code stubs
How to browse the classes in a solution
How to use the Peek Definition and Go To Definition features
How to create a structure
How to use a structure
How to create and use a record
The code for a simple ProductList class
The specifications for the enhanced ProductList class
How to create an indexer
How to code expression-bodied indexers and accessors
How to throw an argument exception
How to define and use a delegate
How to define and use events
How to use anonymous methods and lambda expressions with delegates and events
An introduction to operator overloading
How to overload arithmetic operators
How to overload relational operators
The code for the ProductList class
The code for the Product Maintenance form
How inheritance works
How .NET uses inheritance
Methods inherited from the System.Object class
How to use inheritance in your applications
How to create a base class
How to create a subclass
How polymorphism works
The operation of the Product Maintenance application
The code for the Product, Book, and Software classes
The code for the ProductList class
The code for the Product Maintenance form
The code for the New Product form
How to use the Type class to get information about an object’s type
How to use casting with inheritance
How to work with abstract classes
How to work with sealed classes
An introduction to interfaces
Some of the interfaces defined by .NET
How to create an interface
How to implement an interface
A Product class that implements the ICloneable interface
How to use an interface as a parameter
How to work with default methods
How to work with static methods and fields
How to code a class that defines a generic collection
Some of the generic interfaces defined by .NET
How to implement the IComparable<> interface
How to use constraints
How to implement the IEnumerable<> interface
How to code an interface that uses generics
How to code multiple classes in a single file
How to split a single class across multiple files
How to work with namespaces
How to add XML documentation to a class
How to view the XML documentation
How class libraries work
How to create a class library project
How to add a reference to a class library
How to use the classes in a class library
How unit testing works
How to create a unit test project
How to code unit tests
How to run unit tests
The classes for managing directories, files, and paths
How files and streams work
How to use the FileStream class
How to use the exception classes for file I/O
How to write a text file
How to read a text file
How to use the using statement and the using declaration
A class that works with a text file
How to write a binary file
How to read a binary file
A class that works with a binary file
How LINQ is implemented
Advantages of using LINQ
The three stages of a query operation
How to identify the data source for a query
How to filter the results of a query
How to sort the results of a query
How to select fields from a query
How to join data from two or more data sources
How extension methods work
How lambda expressions work
How to code method-based queries
How to use additional LINQ methods
The user interface
The code for the form
The hardware components of a client/server system
The software components of a client/server system
How a table is organized
How the tables in a database are related
How the columns in a table are defined
The design of the MMABooks database
How to query a single table
How to join data from two or more tables
How to add, update, and delete data in a table
How Entity Framework Core works
How to add EF Core to your project
How to generate DB context and entity classes
The Entity Data Model for the MMABooks database
The code for the DB context class
The code for the Customers entity class
How to modify the generated code
How to retrieve data
How to load related objects
How to enable lazy loading
How to insert, update, and delete data
How to handle database exceptions
How concurrency affects insert, update, and delete operations
How to check for concurrency conflicts
How to handle concurrency exceptions
How to bind controls to an entity collection
How to bind controls to the results of a query
The user interface
The code for the Customer Maintenance form
The code for the Add/Modify Customer form
The .NET data providers
How the connection, command, and data reader objects work
How to create and work with connections
How to create and work with commands
How to use parameters in SQL statements
How to create parameters
How to work with parameters
How to create and work with a data reader
How to execute queries that return a single value
How to execute action queries
The user interface
The class diagram for the business and database classes
The code for the MMABooksDB class
The code for the CustomerDB class
The code for the StateDB class
The code for the Customer Maintenance form
An introduction to the DataGridView control
How to set the functions provided by a DataGridView control
How to bind to a data source
How to format the columns
How to format the headers and alternating rows
How to add and remove columns
How to work with the object that’s passed to an event handler
The user interface
The code for the Product Maintenance form
The user interface for a form that provides for paging
The code for the form
The user interface for a Master/Detail form
The code for the form
How to install the files for this book
How to install Visual Studio
How to set up your system to use the database
If you aren’t already familiar with the supporting courseware that we provide for a book, please go to About our Courseware. As you will see, our courseware consists of the end-of-chapter activities in the book, the files in the student download at our retail site, and the instructor’s materials. These components provide everything that other publishers provide in a way that delivers better results.
Below is a quick summary of the specific courseware for this book. For a detailed description, please read the Instructor’s Summary PDF.
Appendix A in the book gives your students complete instructions for downloading and installing these items on their Windows systems.
To view the "Frequently Asked Questions" for this book in a PDF, just click on this link: View the questions
Then, if you have any questions that aren't answered here, please email us. Thanks!
To view the corrections for this book in a PDF, just click on this link: View the corrections
Then, if you find any other errors, please email us so we can correct them in the next printing of the book. Thank you!
This is our site for college instructors. To buy Murach books, please visit our retail site.