Inmutabilidad en C#

Julian D. Mora

¿Qué es un objeto Inmutable?

Son objetos cuyo estado o valor solo pueden ser establecidas en la inicialización del mismo.

Immutable

  • Las propiedades inmutables en C# indican es que son propiedades de solo lectura.
  • Una vez que un objeto es creado, no puede cambiar nada del mismo.

Crear propiedad inmutable básica

public class ImmutableObject
{
    private readonly string _name;
    public string Name => _name;

    public ImmutableObject(string name)
    {
        _name = name;
    }
}

Prueba

¿el objeto "Students" es inmutable?

public class Classroom
{
    public readonly List<Student> Students;
    
    public Classroom(List<Student> students)
    {
        Students = students;
    }
}

Respuesta

No es inmutable, ya que se permite alterar la colección (agregar o quitar elementos de ella).

Para hacerlo inmutable, se puede usar una interfaz como ReadOnlyCollection, que no expone métodos para agregar.

// Inmutable
public class Classroom
{
    public readonly ReadOnlyCollection<Student> Students;

    public Classroom(ReadOnlyCollection<Student> students)
    {
        Students = students;
    }
}


List<Students> list = new List<Student>();

// add students
Classroom c = new Classroom(list.AsReadOnly());   

Referencias

Inmutabilidad C#

By anlijudavid

Inmutabilidad C#

  • 252