2014-02-21 67 views
0

我有下面这段代码:多个字段的值

public GameMenu(Scene startScene) 
{ 
    this.StartSceneBackup = startScene; 
    this.StartSceneBackup.Entities[0].X = 200; 

    this.StartScene = startScene; 
} 

的StartSceneBackup变量是从来不碰,只有StartScene变量被访问,但是当我改变通过X的值this.StartSceneBackup.Entities[0].X = 200;它改变了值this.StartScene.Entities[0].X = 200;

这是为什么?

回答

2

因为Scene是一个引用类型,所以StartSceneBackup和StartSceneBackup指向同一个对象。 关于引用类型REF http://msdn.microsoft.com/en-us/library/490f96s2.aspx

编辑

,如果你想保存一个备份副本,你应该明白浅克隆和深克隆,以供参考U型必须用深克隆,u能实现像在场景类ICloneable接口这

public class Scene : ICloneable 
{ 
    /// your codes 

    public object Clone() 
    { 
     // it is DEEP CLONE 
     using (var stream = new MemoryStream()) 
     { 
      var formatter = new BinaryFormatter(); 
      formatter.Serialize(stream, this); 
      stream.Position = 0; 
      return (Scene)formatter.Deserialize(stream); 
     } 
    } 
} 

public GameMenu(Scene startScene) 
{ 
this.StartSceneBackup = startScene.Clone(); 
...