We saw that even when you pass a variable by value to a method, if that variable is a reference to an object, the method can change the contents of the object.
C# doesn’t have a built-in language construct that allows you to tell the compiler to prohibit a method from changing the contents of an object that a parameter references. (In C++, we can do this with the const keyword).
In C#, if you want to prevent a method from changing an object, you need to first clone your original object and pass a copy of the object to the method. (You’ll want to make a deep copy of the object).
Here’s an example of using the DeepCopy<T> method to pass a copy of the object.
1 | kirby.BarkAt(DeepCopy<Dog>(jack)); |

