- unified type system
- interfaces
- static typing (type safety at compile time)
- garbage collector
- unsafe block
- JIT, AOT & interpretation
- managed code
- intermediate language
- common language runtimes
- reflection
- base class libraries
- type organization
- nested namespaces
- namespace usage & using keyword
- statement blocks
- assemblies
- entrypoints
- identifiers & their conventions
- keywords & their usage as identifiers
- contextual keywords
- types
- variables & constants
- predefined types
- data & function members
- constructors & instantiation
- instance & static members
- static classes
- the main method & top level statements
- conversion
- implicit conversion & explicit casting
- value & reference types, assignment operation behaviour for each & nullabality
- primitive types
- inference of numerical literal types
- increment & decrement operators
- checked & unchecked keywords
- compile time overflow checking
- arithmetics of 8- & 16-bit integral types
- NaN values & checking for them
- default notion of equality for reference types
- short-circuit evaluation of conditional operators
- the ternary operator
- escape sequences
- unicode characters as in literal form
- string comparison
- verbatin strings
- raw string literals
- interpolated strings
- definition of array data type
- array initialization expression
- preinitialization of elements
- value vs reference elements
- indices & the index type
- ranges & the range type