2013-04-14 3 views
-2
  • У меня есть класс X, и его объект objX, и я устанавливаю для него свойства и сохраняю его в сеансе.
  • Создайте еще один объект objY того же типа X. Скопированный контент objX в objY как: objY = objX.
  • Теперь, когда я изменяю свойства objX, он изменяется в objY.
  • Даже если я как objY = (X) сессии [ «objX»], это дает такой же, как objX

Почему это происходит, как избежать этого? Как этого избежать?Сохранение объекта класса в сеансе, это ссылочный тип?

+0

Оставьте сеансы и попробуйте значительно упрощенную версию: 'class X {public int a; } 'и' objX = new X(); objY = objX; objY.a = 0;/* Выход objX.a */' – delnan

+1

[решаемые] Ниже раствор - Наследуйте "ICloneable" - Реализация интерфейса: ' #region ICloneable Пользователи общественный объект Clone() { MemoryStream мс = новое MemoryStream(); BinaryFormatter bf = new BinaryFormatter(); bf.Serialize (ms, this); ms.Position = 0; объект obj = bf.Deserialize (ms); ms.Close(); return obj as AdminSecurityGroup; } #endregion - 'code' Session [" mgo "] = ((AdminSecurityGroup) mg) .Clone(); 'code' – Avinash

+0

Не ставьте вопрос, который разрешен в названии. Просто отметьте ответ как ответ. –

ответ

2

Вы не клонируете объекты, вы просто копируете ссылки, когда выполняете objX = objY. Используйте правильно реализованный метод клонирования.

КЛОН:

public Class X{ 
    public String A; 
    public String B; 
    public X Clone(){ 
    X cl = new X(); 
    cl.A = this.A; 
    cl.B = this.B; 
    return cl; 
    }    
} 

Синтаксис не может быть на 100% правильно.

+0

не могли бы вы привести пример, как это сделать? – Avinash

+0

Хорошо, но метод клонирования - это что-то довольно простое. – Rafa

+0

В этом случае это не работает. – Avinash

Смежные вопросы