Los records son un tipo de estructura para datos en C# que salieron con .NET 5 en el 2020 y en la versión C# 9. Pero antes de ahondar más en el tema hay que entender la diferencia entre una clase y un record y además entender lo que es la inmutabilidad.
Si te interesa saber cómo ha ido evolucionando C# y .NET en sus distintas versiones aquí tengo el artículo que necesitas 🐿️🔥
Inmutabilidad
Es una propiedad de un objeto que establece que no puede ser modificado después de su creación.
Si necesitaras cambiar un objeto inmutable, en lugar de modificarlo deberás crear una nueva instancia con los cambios.
Las clases son por defecto mutables.
Los records son por defecto inmutables.
Y digo "por defecto" porque podemos cambiar ese comportamiento si lo hacemos explícitamente.
Qué es una clase?
Es un molde o plantilla que define las propiedades y comportamientos de un objeto.
Es un tipo por referencia que permite la creación de instancias, es decir objetos en memoria.
Dentro de sus características más resaltantes tenemos:
- Tipo por referencia: Se almacena en el heap y las variables sólo guardan una referencia al objeto.
- Son mutables por defecto, porque sus propiedades pueden cambiar después de la creación.
- Realiza comparación por referencia: Es decir que dos objetos aunque tengan los mismos valores no son iguales.
- Encapsulamiento: Contiene propiedades y métodos para definir su comportamiento y este está aislado del resto, sólo pertenece al objeto o instancia.
Así luce una clase:
class Persona
{
//Propiedades
public string Nombre { get; set; }
public int Edad { get; set; }
//Métodos
public void Saludar()
{
Console.WriteLine($"Hola, te saluda {Nombre}.");
}
}
Y qué son los records?
Es un tipo por referencia, similar a una clase, pero diseñado específicamente para representar datos inmutables y además que permita la comparación por valor, en lugar de por referencia como lo hacen las clases.
Sus características principales son:
- Tipo por referencia: Al igual que las clases se almacenan en el heap.
- Inmutables por defecto: Sus propiedades una vez seteadas no permiten cambios.
- Comparación por valor: Dos records con los mismos valores se consideran iguales aunque sean dos objetos distintos.
- Sintaxis más concisa: Son menos "verbosos" que las clases.
- También pueden tener constructor y métodos.
- Ideales para DTOs o "data contracts": Son la opción más recomendada para cualquier estructura donde la identidad del objeto no importe, sino sus valores, además es más segura en estos casos debido a su inmutabilidad y práctica.
Así luce un record:
record Persona (string Nombre, int Edad);
Modificar mutabilidad a clases y records
Como te dije las clases son mutables por defecto y los records inmutables por defecto y es que cuando creamos estas estructuras de información tienen ese comportamiento natural.
Sin embargo es posible cambiarlo, cómo? A continuación te lo explico:
Hacer una clase inmutable: Quitarle el set, o ponerle init.
class Persona
{
//Propiedades
public string Nombre { get; }
public int Edad { get; }
//Métodos
public void Saludar()
{
Console.WriteLine($"Hola, te saluda {Nombre}.");
}
}
Cómo convertir un record a mutable: Utilizar una sintaxis con llaves y en sus propiedades añadir el set.
record Persona
{
public string Nombre { get; set; }
public int Edad { get; set; }
}
Pruébalos
Aquí te dejo un pequeño programa en consola donde podrás jugar un poco y entender esto de la inmutabilidad de una clase y un record:
Console.WriteLine("Inmutabilidad: Clases vs Records");
var persona1 = new Persona(){ Nombre = "Gerson"};
persona1.Nombre = "Estefany"; //al ser mutable puedo cambiar el valor de una propiedad
Console.WriteLine(persona1.Nombre);
var alumno1 = new Alumno("Angel");
//alumno1.Nombre = "Jonás"; esto te daría error al ser inmutable
Console.WriteLine(alumno1.Nombre);
//Clase
class Persona
{
//Propiedades
public string Nombre { get; set; }
public int Edad { get; set; }
//Métodos
public void Saludar()
{
Console.WriteLine($"Hola, te saluda {Nombre}.");
}
}
//Record
record Alumno(string Nombre);
Al ejecutarlo obtendrás esto:

Si esta entrada te ha gustado considera compartirla! 😎
Créditos de imagen de portada: Foto de La-Rel Easter en Unsplash

Un comentario en «Qué son los Records en C# y cuándo utilizarlos?»