You sometimes want to make a class immutable–meaning that you can’t change any instance data in an object after it is created.
Below is an example of a simple class, created using the guidelines for creating an immutable class.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
| public class ImmutableDog{ // All properties are read-only public string Name { get; private set; } public int Age { get; private set; } // Return copy of any mutable data // (assuming that DogCollar is mutable) private DogCollar collar; public DogCollar Collar { get { return (DogCollar)<span class="skimlinks-unlinked">collar.Clone</span>(); } private set { if (collar != value) collar = value; } } // All data that we need is passed into constructor public ImmutableDog(string name, int age, DogCollar collar) { Name = name; Age = age; // Make copy of any mutable data passed in Collar = (DogCollar)<span class="skimlinks-unlinked">collar.Clone</span>(); } // Methods don't change instance data public void DoSomething() { Console.WriteLine(string.Format("Hi, I'm {0}, aged {1}", Name, Age)); }} |

