Head First C#, 4e: A Learner's Guide to Real-World Programming with C# and .Net Core [4 ed.]
1491976705, 9781491976708
What will you learn from this book? Dive into C# and create apps, user interfaces, games, and more using this fun and hi
3,732
924
77MB
English
Pages 800
[789]
Year 2021
Report DMCA / Copyright
DOWNLOAD PDF FILE
Table of contents :
Copyright
Table of Contents
Intro
Chapter 1
Why you should learn C#
Visual Studio is a tool for writing code and exploring C#
Create your first project in Visual Studio
Let’s build a game!
Here’s how you’ll build your game
Create a WPF project in Visual Studio
Use XAML to design your window
Design the window for your game
Set the window size and title with XAML properties
Add rows and columns to the XAML grid
Make the rows and columns equal size
Add a TextBlock control to your grid
Now you’re re ady to start writing code for your game
Generate a me thod to set up the game
Finish your SetUpGame me thod
Run your program
Add your new project to source control
Make your TextBlocks respond to mouse clicks
Add the TextBlock_MouseDown code
Make the rest of the TextBlocks call the same MouseDown event handler
Add a timer to your game’s code
Use the debugger to troubleshoot the exception
Add the rest of the code and finish the game
Update your code in source control
Chapter 2
Let’s take a closer look at the files for a console app
Two classes can be in the same namespace (and file!)
Statements are the building blocks for your apps
Your programs use variables to work with data
Generate a new me thod to work with variables
Add code that uses operators to your me thod
Use the debugger to watch your variables change
Use operators to work with variables
“if” statements make decisions
Loops perform an action over and over
Use code snippets to help write loops
Controls drive the mechanics of your user interfaces
Create a WPF app to experiment with controls
Add a TextBox control to your app
Add C# code to update the TextBlock
Add an event handler that only allows number input
Add sliders to the bottom row of the grid
Add C# code to make the rest of the controls work
Unity Lab #1
Chapter 3
If code is useful, it gets reused
Some methods take parameters and return a value
Let’s build a program that picks some cards
Create your PickRandomCards console app
Finish your PickSomeCards method
Your finished CardPicker class
Ana’s working on her next game
Ana’s game is evolving…
Build a paper prototype for a classic game
Up next: build a WPF version of your card picking app
A StackPanel is a container that stacks other controls
Reuse your CardPicker class in a new WPF app
Use a Grid and StackPanel to lay out the main window
Lay out your Card Picker desktop app’s window
Ana's prototypes look great…
Ana can use objects to solve her problem
You use a class to build an object
When you create a new object from a class, it’s called an instance of that class
A better solution for Ana…brought to you by objects
An instance uses fields to keep track of things
Thanks for the memory
What’s on your program’s mind
Sometimes code can be difficult to re ad
Use intuitive class and method names
Build a class to work with some guys
There’s an e asier way to initialize objects with C
Use the C# Interactive window to run C# code
Chapter 4
Owen could use our help!
Character sheets store different types of data on paper
A variable’s type determines what kind of data it can store
C# has several types for storing integers
Let’s talk about strings
A literal is a value written directly into your code
A variable is like a data to-go cup
Other types come in different sizes, too
10 pounds of data in a 5-pound bag
Casting lets you copy values that C# can’t automatically convert to another type
C# does some conversions automatically
When you call a method, the arguments need to be compatible with the types of the parameters
Owen is constantly improving his game…
Let’s help Owen experiment with ability scores
Use the C# compiler to find the problematic line of code
Use reference variables to access your objects
References are like sticky notes for your objects
If there aren’t any more references, your object gets garbage-collected
Multiple references and their side effects
Two references mean TWO variables that can change the same object’s data
Objects use references to talk to each other
Arrays hold multiple values
Arrays can contain reference variables
null means a reference points to nothing
A random test drive
Welcome to Sloppy Joe’s Budget House o’ Discount Sandwiches!
Unity Lab #2
Chapter 5
Create a console app to calculate damage
Design the XAML for a WPF version of the damage calculator
The code-behind for the WPF damage calculator
Tabletop talk (or maybe…dice discussion?)
Let’s try to fix that bug
Use Debug.WriteLine to print diagnostic information
It’s e asy to accidentally misuse your objects
Encapsulation me ans keeping some of the data in a class private
Use encapsulation to control access toyour class’s me thods and fields
But is the RealName field REALLY protected?
Private fields and me thods can only be accessed from instances of the same class
Why encapsulation? Think of an object as a black box…
Let’s use encapsulation to improve the SwordDamage class
Encapsulation keeps your data safe
Write a console app to test the PaintballGun class
Properties make encapsulation easier
Modify your Main method to use the Balls property
Auto-implemented properties simplify your code
Use a private setter to create a read-only property
What if we want to change the magazine size?
Use a constructor with parameters to initialize properties
Specify arguments when you use the “new” keyword
Chapter 6
Calculate damage for MORE weapons
Use a switch statement to match several candidates
One more thing…can we calculate damage for a dagger? and a mace? and a staff? and...
When your classes use inheritance, you only need to write your code once
Build up your class model by starting general and getting more specific
How would you design a zoo simulator?
Different animals have different behaviors
Every subclass extends its base class
Any place where you can use a base class, you can use one of its subclasses instead
Use a colon to extend a base class
We know that inheritance adds the base class fields, properties, and methods to the subclass…
A subclass can override methods to change or replace members it inherited
Some members are only implemented in a subclass
Use the debugger to understand how overriding works
Build an app to explore virtual and override
A subclass can hide methods in the base class
Use the override and virtual keywords to inherit behavior
A subclass can access its base class using the base keyword
A subclass and base class can have different constructors
It’s time to finish the job for Owen
When your classes overlap as little as possible, that’s an important design principle called separation of concerns
Build a beehive management system
The beehive management system class model
The Queen class: how she manages the worker bees
The UI: add the XAML for the main window
Feedback drives your Beehive Management game
The Beehive Management System is turn-based…
Some classes should never be instantiated
An abstract class is an intentionally incomplete class
Like we said, some classes should never be instantiated
An abstract method doesn’t have a body
Abstract properties work just like abstract me thods
Unity Lab #3
Chapter 7
The beehive is under attack!
We can use casting to call the DefendHive method…
An interface defines methods and properties that a class must implement…
Interfaces let unrelated classes do the same job
Get a little practice using interfaces
You can’t instantiate an interface, but you can reference an interface
Interface references are ordinary object references
The RoboBee 4000 c an do a worker bee’s job without using valuable honey
The IWorker's Job property is a hack
Use “is” to check the type of an object
Use “is” to access methods in a subclass
What if we want different animals to swim or hunt in packs?
Use interfaces to work with classes that do the same job
Safely navigate your class hierarchy with “is”
C# has another tool for safe type conversion: the “as” keyword
Use upcasting and downcasting to move up and down a class hierarchy
A quick example of upcasting
Upcasting turns your CoffeeMaker into an Appliance
Downcasting turns your Appliance back into a CoffeeMaker
Upcasting and downcasting work with interfaces, too
Interfaces can inherit from other interfaces
Interfaces can have static members
Default implementations give bodies to interface methods
Add a ScareAdults method with a default implementation
Data binding updates WPF controls automatically
Modify the Beehive Management System to use data binding
Polymorphism means that one object can take many different forms
Chapter 8
Strings don’t always work for storing categories of data
Enums let you work with a set of valid values
Enums let you represent numbers with names
We could use an array to create a de ck of cards…
Arrays can be annoying to work with
Lists make it e asy to store collections of…anything
Lists are more flexible than arrays
Let’s build an app to store shoes
Generic collections can store any t ype
Collection initializers are similar to object initializers
Let’s create a List of Ducks
Lists are e asy, but SORTING can be tricky
IComparable helps your List sort its Ducks
Use IComparer to tell your List how to sort
Create an instance of your comparer object
Comparers can do complex comparisons
Overriding a ToString me thod lets an object describe itself
Update your foreach loops to let your Ducks and Cards write themselves to the console
You can upcast an entire list using IEnumerable
Use a Dictionary to store keys and values
The Dictionary functionality rundown
Build a program that uses a dictionary
And yet MORE collection types…
A queue is FIFO—first in, first out
A stack is LIFO—last in, first out
Downloadable exercise: Two Decks
Unity Lab #4
Chapter 9
Jimmy’s a Captain Amazing super-fan…
…but his collection’s all over the place
Use LINQ to query your collections
LINQ works with any IEnumerable
LINQ’s query syntax
LINQ works with objects
Use a LINQ q uery to finish the app for Jimmy
The var keyword lets C# figure out variable types for you
LINQ is versatile
LINQ queries aren’t run until you access their results
Use a group query to separate your sequence into groups
Use join queries to merge data from two sequences
Use the new keyword to create anonymous types
Unit tests help you make sure your code works
Add a unit test project to Jimmy’s comic collection app
Write your first unit test
Write a unit test for the GetReviews me thod
Write unit tests to handle edge cases and weird data
Use the => operator to create lambda expressions
A lambda test drive
Refactor a clown with lambdas
Use the ?: operator to make your lambdas make choices
Lambda expressions and LINQ
LINQ queries can be written as chained LINQ me thods
Use the => operator to create switch expressions
Explore the Enumerable class
Create an enumerable sequence by hand
Use yield return to create your own sequences
Use yield re turn to refactor ManualSportSequence
Downloadable exercise: Go Fish
Chapter 10
.NET uses streams to read and write data
Different streams read and write different things
A FileStream reads and writes bytes in a file
Write text to a file in three simple steps
The Swindler launches another diabolical plan
Use a StreamReader to read a file
Data can go through more than one stream
Use the static File and Directory classes to work with files and directories
IDisposable makes sure objects are closed properly
Avoid filesystem errors with using statements
Use a MemoryStream to stream data to memory
What happens to an object when it’s serialized?
But what exactly IS an object’s state? What needs to be saved?
When an object is serialized, all of the objects it refers to get serialized, too…
Use JsonSerialization to serialize your objects
JSON only includes data, not specific C# types
Next up: we’ll take a deep dive into our data
C# strings are encoded with Unicode
Visual Studio works really well with Unicode
.NET uses Unicode to store characters and text
C# can use byte arrays to move data around
Use a BinaryWriter to write binary data
Use BinaryReader to read the data back in
A hex dump lets you see the bytes in your files
Use StreamReader to build a hex dumper
Use Stream.Read to read bytes from a stream
Modify your hex dumper to use command-line arguments
Downloadable exercise: Hide and Seek
Unity Lab #5
Chapter 11
The life and death of an object
Use the GC class (with caution) to force garbage collection
Your last chance to DO something…your object’s finalizer
When EXACTLY does a finalizer run?
Finalizers can’t depend on other objects
A struct looks like an object…
Values get copied; references get assigned
Structs are value types; objects are reference types
The stack vs. the heap: more on memory
Use out parameters to make a me thodreturn more than one value
Pass by reference using the ref modifier
Use optional parameters to set default values
A null reference doesn’t refer to any object
Non-nullable reference t ypes help you avoid NREs
The null-coalescing operator ?? helps with nulls
Nullable value types can be null…and handled safely
“Captain” Amazing…not so much
Extension methods add new behavior to EXISTING classes
Extending a fundamental type: string
Chapter 12
Your hex dumper reads a filename from the command line
When your program throws an exception,the CLR generates an Exception object
All Exception objects inherit from System.Exception
There are some files you just can’t dump
What happens when a method you want to call is risky?
Handle exceptions with try and catch
Use the debugger to follow the try/catch flow
If you have code that ALWAYS needs to run, use a finally block
Catch-all exceptions handle System.Exception
Use the right exception for the situation
Exception filters help you create precise handlers
The worst catch block EVER: catch-all plus comments
Temporary solutions are OK (temporarily)
Unity Lab #6
Downloadable exercise: Animal match boss battle
Thank you for reading our book!
Appendix i
Appendix ii
Index