An Example of a Simple Immutable Class

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));
    }
}