C#语言种的MemberwiseClone方法仅仅是再内存种创建一个新对象,然后将原有对象的所有字段直接复制过去,无论是值类型还是引用类型,是值类型的就复制值类型,是应用类型的就复制引用本身(而不会复制所引用的对象),因此,是浅拷贝。
需要注意的是: 在利用MemberwiseClone()创建新对象的时候,不会像利用new的时候一样,也就是不会先执行字段的创建和构造方法条用的过程。
例如:
public class TClass
{
public TClass()
{
MessageBox.Show("Construct executed");
}
private ObservableCollection<string> oc = new ObservableCollection<string>();
public void AddData(string x)
{
oc.Add(x);
}
public void Print()
{
string outputstring = "";
foreach(var x in oc)
{
outputstring += (x+"---");
}
outputstring += "\n";
MessageBox.Show(outputstring+oc.GetHashCode().ToString());
}
public TClass Clone()
{
//执行以下语句的时候,不会对oc重新new一个集合对象,也不会对tc2重新new一个TClass2类型的对象,同时也不会调用构造函数
}
}