Strings are considered reference types yet can act like values. When shallow copying something either manually or with the MemberwiseClone(), how are strings handled? Are they considred separate and isolated from the copy and master?
Strings ARE reference types. However they are immutable (they cannot be changed), so it wouldn't really matter if they copied by value, or copied by reference.
If they are shallow-copied then the reference will be copied... but you can't change them so you can't affect two objects at once.
You are only copying a reference (think "pointer"); the two references are separate (but happen to have the same value), but there is only a single string object.
Consider this:
public class Person
{
string name;
// Other stuff
}
If you call MemberwiseClone, you'll end up with two separate instances of Person, but their name
variables, while distinct, will have the same value - they'll refer to the same string instance. This is because it's a shallow clone.
If you change the name in one of those instances, that won't affect the other, because the two variables themselves are separate - you're just changing the value of one of them to refer to a different string.