Surprisingly, String.Clone() doesn\'t return a copy of a string as String.Copy() would do. Instead, it returns \'this\', the original stri
How could you detect the difference? Only by comparing the two references using object.ReferenceEquals. But by any semantic operation on the string you can't tell the difference.
Comparing strings by reference is almost always a bug to begin with because you can rarely rely on interning to happen or not happen.
This issue does not only apply to String. If you had an immutable Point class, why would you return a fresh object from Clone? No need.
IClonable is rarely used and rarely useful, anyway. If you want to expose users of your class a way to obtain a copy of a given instance you don't need to inherit from IClonable at all.