DRAFT
Q: What is the difference between a deep and a shallow copy?
Asking for a "copy" sets up the expectation that the new object will be a copy of the original not a pointer to the original. For value properties (e.g. original.MyInt
) both a deep and a shallow copy satisfy that expectation: both will provide a copy of original
that has a copy of the MyInt
value. The difference between a shallow and deep copy happens with reference properties (e.g. original.MyClass
). A shallow copy provides a copy of the reference to MyClass
, which means both original.MyClass
and copy.MyClass
now point at the same instance. That is not a copy. A deep copy on the other hand provides an actual copy of MyClass
and all its properties. The lack of symmetry of a shallow copy can confuse developers, because copy.MyInt
is a copy of original.MyInt
but copy.MyClass
is not a copy of original.MyClass
.
Q: How do we implement IEquatable<T>
for value types?
Q: How do we implement IEquatable<T>
for reference types?