#780 – The Case for Immutable structs
February 14, 2013 1 Comment
You can run into problems when a struct is mutable. (E.g. when used as a property, in a collection, or when modifying a struct through a method).
You can avoid problems by being careful about how you use the struct and by being aware of value type semantics (you get a copy of the value-typed object, rather than a reference to it).
You can also avoid problems by making your custom structs immutable. This means:
- Exposing the data in the struct exclusively through read-only properties
- Defining methods that modify the value in the struct to return a new instance of the struct
For an example of this, look at the System.DateTime type, which is a struct. Its properties all have only a get accessor, so you can’t change them. And methods that change the value of a DateTime, e.g. AddDays, return a new instance of a DateTime.