So here's the deal: if you implement ICloneable in a public API, you are a making a big mistake. Why? Because there's no way of knowing if the Clone() function will do a deep or shallow copy.
As it turns out, even Microsoft know that they have made a mistake with this interface. Oopsy!