Cover
FM
Copyright
Table of Contents
Preface
Chapter 1: Hello C#
Introduction
Running and Developing C# with the .NET CLI
Creating Programs with the CLI and VS Code
Basic Anatomy of a C# Program
Exercise 1.01: Creating a Console App that Says ""Hello World
Top-Level Statements
Declaring Variables
Declaring Variables Explicitly
Declaring Variables Implicitly
Explicit versus Implicit Declaration
Exercise 1.02: Assigning Variables to User Inputs
Data Types
Strings
Exercise 1.03: Checking String Immutability
Comparing Strings
Numeric Types
Exercise 1.04: Using the Basic Arithmetic Operators
Classes
Dates
Exercise 1.05: Using Date Arithmetic.
Formatting Dates
Logical Operators and Boolean Expressions
Using if-else Statements
Exercise 1.06: Branching with if-else
The Ternary Operator
Reference and Value Types
Exercise 1.07: Grasping Value and Reference Equality
Default Value Types
Enhancing Decision Making with the switch Statement
Exercise 1.08: Using switch to Order Food
Iteration Statements
while
Exercise 1.09: Checking Whether a Number is Prime with a while Loop
Jump Statements
do-while
Arrays
for Loops
Exercise 1.10: Ordering an Array Using Bubble Sort
foreach Statements
File Handling
FileAccess
FileMode
Exercise 1.11: Reading Content from Text Files
Disposable Objects
Exercise 1.12: Writing to a Text File
Exceptions
Exercise 1.13: Handling Invalid User Inputs with try/catch
Activity 1.01: Creating a Guessing Game
Summary
Chapter 2: Building Quality Object-Oriented Code
Introduction
Classes and Objects
Constructors
Fields and Class Members
Exercise 2.01: Creating Classes and Objects
Reference Types
Properties
Object Initialization
Comparing Functions and Methods
An Effective Class
Exercise 2.02: Comparing the Area Occupied by Different Shapes
The Four Pillars of OOP
Encapsulation
Inheritance
Polymorphism
What is the Benefit of Polymorphism?
Abstraction
Interfaces
Exercise 2.03: Covering Floor in the Backyard
SOLID Principles in OOP
Single Responsibility Principle
Open-Closed Principle
Liskov Substitution
Interface Segregation
Dependency Inversion
How C# Helps with Object-Oriented Design
Static
Sealed
Partial
Virtual
Internal
Conditional Operators
Ternary Operators
Overloading Operators
Nullable Primitive Types
Generics
Enum
Extension Methods
Struct
Record
Init-Only Setters
ValueTuple and Deconstruction
Exercise 2.04: Creating a Composable Temperature Unit Converter
Activity 2.01: Merging Two Circles
Summary
Chapter 3: Delegates, Events, and Lambdas
Introduction
Delegates
Defining a Custom Delegate
Exercise 3.01: Defining and Invoking Custom Delegates
The Inbuilt Action and Func Delegates
Assigning Delegates