Cover of C# 10 in a Nutshell

C# 10 in a Nutshell

Joseph Albahari


Highlights

- 2. C# Language Basics
You can insert an underscore anywhere within a numeric literal to make it more readable:
- 2. C# Language Basics
decrementing the minimum possible int value results in the maximum possible int value:
- 2. C# Language Basics
The ??= operator (introduced in C# 8) is the null-coalescing assignment operator. It says, “If the operand to the left is null, assign the right operand to the left operand.”
- 2. C# Language Basics
You can also switch on multiple values (the tuple pattern):
- 2. C# Language Basics
From .NET 6, project files allow for implicit global using directives. If the Implici⁠t​Usings element is set to true in the project file (the default for new projects), the following namespaces are automatically imported: System System.Collections.Generic System.IO System.Linq System.Net.Http System.Threading System.Threading.Tasks Additional namespaces are imported, based on the project SDK (Web, Windows Forms, WPF, and so on)
- 2. C# Language Basics
Extern aliases allow your program to reference two types with the same fully qualified name (i.e., the namespace and type name are identical). This is an unusual scenario and can occur only when the two types come from different assemblies.
- 3. Creating Types in C#
A constant can serve a similar role to a static readonly field, but it is much more restrictive—both in the types you can use and in field initialization semantics. A constant also differs from a static readonly field in that the evaluation of the constant occurs at compile time
- 3. Creating Types in C#
the following pairs of methods cannot coexist in the same type, because the return type and the params modifier are not part of a method’s signature
- 3. Creating Types in C#
Whether a parameter is pass-by-value or pass-by-reference is also part of the signature
- 3. Creating Types in C#
A deconstructor (also called a deconstructing method) acts as an approximate opposite to a constructor: whereas a constructor typically takes a set of values (as parameters) and assigns them to fields, a deconstructor does the reverse and assigns fields back to a set of variables.
- 3. Creating Types in C#
this approach makes versioning difficult, in that adding an optional parameter to the constructor at a later date breaks binary compatibility with consumers (whereas adding a new init-only property breaks nothing).
- 3. Creating Types in C#
From C# 9, you can override a method (or property get accessor) such that it returns a more derived (subclassed) type.
- 3. Creating Types in C#
If a constructor in a subclass omits the base keyword, the base type’s parameterless constructor is implicitly called
- 3. Creating Types in C#
Boxing is the act of converting a value-type instance to a reference-type instance