As someone who uses many Domain-Driven Design patterns in my .NET code, I've long wanted to have built-in immutable value objects in C#. Value objects have a few characteristics: They're immutable. You can't change their state. Their state is fully set when they're created. Because, they're immutable once created.