- static void Main(string[] args)
- {
- var cls1 = new MyClass { MyInt = 111, MyStr = "这是111", OtherClass = new MyClassOther { MyInt = 111111, MyStr = "这是111111" } };
- //Clone后:
- //cls1.MyStr与cls2.MyStr都是指向了"这是111"的reference而不是instance
- //也可以这么理解:"这是111"是放在一个表里且有个ID;cls1与cls2是另一个表的两条记录,这两条记录的字段MyStr里存放的都是"这是111"的ID。
- //cls1.OtherClass与cls2.OtherClass同理是指向了相关对象的reference而不是instance
- var cls2 = cls1.Clone() as MyClass;
- //此操作对cls1.MyStr没有任何影响,只是将cls2.MyStr的reference变为了"这是222"的reference
- //所以改动后:cls1.MyStr != cls2.MyStr
- cls2.MyStr = "这是222";
- //此操作跟上面有些不一样,因为cls2.OtherClass与cls1.OtherClass都是指向同一个reference,此reference没有变,对reference的instance任何改动,
- //所以改动后,cls1.OtherClass.MyStr == cls2.OtherClass.MyStr cls1.OtherClass.MyInt == cls2.OtherClass.MyInt
- cls2.OtherClass.MyStr = "这是444444";
- cls2.OtherClass.MyInt =444444;
- }
- class MyClass : ICloneable
- {
- public int MyInt { get; set; }
- public string MyStr { get; set; }
- public object Clone()
- {
- return this.MemberwiseClone();
- }
- public MyClassOther OtherClass { get; set; }
- }
- class MyClassOther
- {
- public int MyInt { get; set; }
- public string MyStr { get; set; }
- }
MemberwiseClone 关于 string 浅拷贝的一个误解
最新推荐文章于 2024-07-31 17:24:42 发布