One of the most anticipated features coming in C#9 are Record types. Record types make it easy to create immutable reference types in .NET. They become the perfect fit for Value Objects in DDD terms.
A new keyword is introduced to support this: record. The record keyword makes an object immutable and behave like a value type.
An example:
You can even write this using a shorter syntax using positional records:
But what if you want to change the person name? How can we do this knowing that the object is immutable? Do I need to copy all properties into a new object?
Let’s introduce the with keyword to fix this. It allows you create an object from another by specifying what property changes: