Essential C# 6.0 by Mark MichaelisEssential C# 6.0 by Mark Michaelis

Essential C# 6.0

byMark Michaelis, Eric Lippert

Paperback | September 24, 2015

Pricing and Purchase Info


Earn 375 plum® points

Prices and offers may vary in store


In stock online

Ships free on orders over $25

Not available in stores


“Welcome to one of the greatest collaborations you could dream of in the world of C# books—and probably far beyond!”

—From the Foreword by Mads Torgersen, C# Program Manager, Microsoft

Essential C# 6.0 is a well-organized, no-fluff guide to the latest versions of C# for programmers at all levels of experience. Fully updated to reflect new C# 6.0 and .NET 4.6 features and patterns, it will help you write C# code that’s simple, powerful, robust, secure, and maintainable.


This book’s authors are world-class C# experts: long-time Microsoft MVP and Regional Director Mark Michaelis and Eric Lippert, formerly principal developer on Microsoft’s C# compiler team. Together, they cover the entire language, illustrating key constructs with succinct examples and offering a complete foundation for successful C# development.


Essential C# 6.0 makes it easy to program with any version of C#, whether you’re creating new code or maintaining existing systems. Separate indexes for C# versions 4, 5, and 6 help you quickly find version-specific answers with accompanying visual indicators that help you identify which language innovations will work when. This edition also includes a set of best-practice C# Coding Guidelines updated to leverage C# 6.0 constructs.


Coverage includes

  • Mastering C# data types, operators, control flow, methods, and parameters
  • Using C# object-oriented constructs, including classes, inheritance, interfaces, and more—all with the significantly simplified syntax of C# 6.0
  • Working with well-formed value and reference types
  • Implementing reliable, effective exception handling
  • Reducing code complexity with generics, delegates, lambda expressions, and events (including a simplified C# 6.0 syntax for triggering events)
  • Learning dynamic programming with reflection and attributes
  • Querying diverse data collections using LINQ with query expressions
  • Creating custom collections that operate against business objects
  • Using collection interfaces and standard query operators to access .NET collections
  • Understanding the Common Language Infrastructure and C# in the context of .NET 4.6
  • Taking advantage of declarative programming, embedded metadata, reflection, and attributes
  • Mastering multithreading and synchronization, including the new async/await paradigm
  • Using P/Invoke, pointers, and direct memory manipulation to interoperate with other languages
  • Understanding how C# programs relate to the underlying runtime


For Qualified Instructors

An instructor’s guide, exercises, and a slide deck are available to support your courses.

Mark Michaelis is founder of IntelliTect, where he serves as its Chief Technical Architect and trainer. For nearly two decades he has been a Microsoft MVP, and he is also a Microsoft Regional Director. Michaelis serves on several Microsoft software design review teams, including C#, Azure, SharePoint, and Visual Studio ALM. He speaks...
Title:Essential C# 6.0Format:PaperbackDimensions:1008 pages, 9.1 × 7 × 2.1 inPublished:September 24, 2015Publisher:Pearson EducationLanguage:English

The following ISBNs are associated with this title:

ISBN - 10:0134141040

ISBN - 13:9780134141046


Rated 4 out of 5 by from A very in-depth book. I have been developing with C# for years, but found that this book had a lot to teach me. It was very well written and I thoroughly learning about the new features of C# 6.
Date published: 2017-02-22

Table of Contents

Figures         xv

Tables        xvii

Foreword        xix

Preface          xxiii

Acknowledgments        xxxv

About the Authors       xxxvii


Chapter 1: Introducing C#            1

Hello, World   2

C# Syntax Fundamentals   4

Console Input and Output   18


Chapter 2: Data Types          35

Fundamental Numeric Types   36

More Fundamental Types   45

null and void   58

Categories of Types   61

Nullable Modifier   64

Conversions between Data Types   65

Arrays   71


Chapter 3: Operators and Control Flow         89

Operators   90

Introducing Flow Control   107

Code Blocks ({})   114

Code Blocks, Scopes, and Declaration Spaces   116

Boolean Expressions   118

Bitwise Operators (<_2c_>>, , &, ^, ~)   128

Control Flow Statements, Continued   134

Jump Statements   146

C# Preprocessor Directives   152


Chapter 4: Methods and Parameters           161

Calling a Method   162

Declaring a Method   169

The using Directive   175

Returns and Parameters on Main()   180

Advanced Method Parameters   183

Recursion   192

Method Overloading   194

Optional Parameters   197

Basic Error Handling with Exceptions   202


Chapter 5: Classes            217

Declaring and Instantiating a Class   221

Instance Fields   225

Instance Methods   227

Using the this Keyword   228

Access Modifiers   235

Properties   237

Constructors   254

Static Members   265

Extension Methods   275

Encapsulating the Data   277

Nested Classes   281

Partial Classes   284


Chapter 6: Inheritance           289

Derivation   290

Overriding the Base Class   302

Abstract Classes   314

All Classes Derive from System.Object   320

Verifying the Underlying Type with the is Operator   321

Conversion Using the as Operator   322


Chapter 7: Interfaces          325

Introducing Interfaces   326

Polymorphism through Interfaces   327

Interface Implementation   332

Converting between the Implementing Class and Its Interfaces   338

Interface Inheritance   338

Multiple Interface Inheritance   341

Extension Methods on Interfaces   341

Implementing Multiple Inheritance via Interfaces   343

Versioning   346

Interfaces Compared with Classes   347

Interfaces Compared with Attributes   349


Chapter 8: Value Types         351

Structs   355

Boxing   362

Enums   371


Chapter 9: Well-Formed Types           383

Overriding object Members   383

Operator Overloading   395

Referencing Other Assemblies   403

Defining Namespaces   409

XML Comments   413

Garbage Collection   418

Resource Cleanup   421

Lazy Initialization   429


Chapter 10: Exception Handling         433

Multiple Exception Types   433

Catching Exceptions   436

General Catch Block   440

Guidelines for Exception Handling   443

Defining Custom Exceptions   446

Rethrowing a Wrapped Exception   449


Chapter 11: Generics          455

C# without Generics   456

Introducing Generic Types   461

Constraints   473

Generic Methods   486

Covariance and Contravariance   491

Generic Internals   498


Chapter 12: Delegates and Lambda Expressions           505

Introducing Delegates  506

Lambda Expressions   516

Anonymous Methods   522

General-Purpose Delegates: System.Func and System.Action   524


Chapter 13: Events           543

Coding the Observer Pattern with Multicast Delegates   544

Events   558


Chapter 14: Collection Interfaces with Standard Query Operators           571

Anonymous Types and Implicitly Typed Local Variables   572

Collection Initializers   578

What Makes a Class a Collection: IEnumerable    582

Standard Query Operators   588


Chapter 15: LINQ with Query Expressions            621

Introducing Query Expressions   622

Query Expressions Are Just Method Invocations   640


Chapter 16: Building Custom Collections            643

More Collection Interfaces   644

Primary Collection Classes   646

Providing an Indexer   663

Returning Null or an Empty Collection   666

Iterators   667


Chapter 17: Reflection, Attributes, and Dynamic Programming           683

Reflection   684

nameof Operator   694

Attributes   696

Programming with Dynamic Objects   719


Chapter 18: Multithreading          731

Multithreading Basics   734

Working with System.Threading   741

Asynchronous Tasks   749

Canceling a Task   768

The Task-Based Asynchronous Pattern   775

Executing Loop Iterations in Parallel   798

Running LINQ Queries in Parallel   809


Chapter 19: Thread Synchronization   815

Why Synchronization?   817

Timers   845


Chapter 20: Platform Interoperability and Unsafe Code          849

Platform Invoke   850

Pointers and Addresses   862

Executing Unsafe Code via a Delegate   872

Using the Windows Runtime Libraries from C#   873


Chapter 21: The Common Language Infrastructure          877

Defining the Common Language Infrastructure   878

CLI Implementations   879

C# Compilation to Machine Code   879

Runtime   883

Application Domains   888

Assemblies, Manifests, and Modules   888

Common Intermediate Language   891

Common Type System   892

Common Language Specification   893

Base Class Library   893

Metadata   894


Appendix A: Downloading and Installing the C# Compiler and CLI Platform          897

Microsoft’s .NET   897


Appendix B: Tic-Tac-Toe Source Code Listing          903


Index 909

Index of 6.0 Topics 953

Index of 5.0 Topics 955

Index of 4.0 Topics 959

Index of 3.0 Topics 965