Yes, usually. Of course, it depends upon how the class designer
implemented ICloneable, which never does specifically say whether a
clone should be a shallow copy or a deep copy.
Regardless, yes, a clone usually copies only the fields that are part
of the object being cloned, and does not copy objects to which the
cloned object holds references. So, in essence, by cloning you get:
1. A new object.
2. New copies of any value types (ints, doubles, DateTimes, structs)
that the object holds.
3. References to the same reference type objects to which the original
object held references.
Again, this depends upon how the class designer implemented ICloneable.
Of course, if the class doesn't implement ICloneable, then you can't
copy it using Clone(), and you only option is to create a new one using
"new" and whatever fields you can get at. Some classes (for example
System.Drawing.Font) work this way.