Si venís trabajando con C# desde hace un tiempo, probablemente sepas que this en un método de instancia no se puede modificar. Es una referencia al objeto actual, y es inmutable… ¿o no?
Bueno, hay una excepción sorprendente: en los constructores de structs, this puede ser reasignado. Así es: podemos hacer this = default; y reinicializar por completo una instancia.
¿Qué significa this = default;?
Cuando hacemos esto en un struct:
this = default;
Le estamos diciendo al compilador que queremos resetear todos los campos del struct a sus valores por defecto:
- int, float, double → 0
- bool → false
- objetos → null
- otros structs → default también
¿Por qué es válido?
Porque los structs en C# son tipos de valor, no de referencia como las class. En los constructores de un struct, el compilador permite esta asignación especial a this porque se trata de una variable local implícita, y su valor es mutable dentro del constructor.
¿Y por qué no se puede hacer en class?
Porque en una clase, this es una referencia al objeto actual, y C# no te permite cambiar esa referencia. Sería como tratar de asignar una nueva dirección de memoria a una variable inmutable.
this = default; es útil cuando:
- Querés evitar código repetido asignando valores por defecto.
- Querés cortar un constructor temprano y dejar el objeto en estado "vacío" o neutro.
- Trabajás con structs grandes o generics, y querés evitar errores al inicializar manualmente cada campo.
this = default puede parecer extraño al principio, pero es una herramienta válida y muy útil para inicializar structs de manera limpia y segura. No es magia, es C# aprovechando las reglas especiales de los tipos de valor.