Introduction to C#

Nullables

Check this post on c# nullables and how to use them

readonly

La palabra clave readonly hace que no se pueda asignar después de que el constructor acabe.

public class Age
{
	private readonly int _year;

	public Age(int year)
	{
		_year = year;
	}

	public void OverwriteYear()
	{
		_year = 1967; // Compilation error
	}
}

readonly vs const

readonly values can be computed dynamically, (!) but need to be assigned before the constructor exits (!).

In the other hand const are implicitly static.

(More info on this subject)

public class ReadonlyVsConst
{
	public const int I_VALUE = 2; // HAS TO be assigned on declaration.
	public readonly int I_RO_VALUE; // Can be assigned on the constructor.

	public ReadonlyVsConst()
	{
		I_RO_VALUE = 3;
	}
}

var vs dynamic

Con var se declara una variable cuyo tipo se infiere a partir de la expresión que se le asigna. pero el uso de var no significa que la variable sea dinámica.

var i = 10; 
int i2 = i + 1;
i = 20; // this fails
string s = i; // this also fails
var k = null; // also fails

dynamic no se sabe que tipo va a ser en tiempo de compilacion pero si en tiempo de ejecucion. dynamic si que permite declarar una variable dinámica

dynamic i = 12;
int i2 = i + 1;
i = "20"; // OK
string s = i; // OK
dynamic k = null; // OK

Regiones

Son como comentarios pero el código entre regiones se puede comprimir en vs code.

#region
var mensaje = "Hola"
#endregion

Como usar palabras reservadas

Las palabras reservadas como if se pueden usar si se pone un @ delante.

var if = 2; // fails
var @if = 2; // OK

Cuando se añaden nuevas keywords, se hace como palabras clave contextuales. Esto evita problemas de compilación para programas con versiones anteriores.