- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
public object Clone()
{
using (MemoryStream stream = new MemoryStream())
{
BinaryFormatter formatter = new BinaryFormatter();
formatter.Serialize(stream, this);
stream.Position = 0;
ColLink result = (ColLink)formatter.Deserialize(stream);
result.Id = IdentityManager.GetId();
result.GUID = Guid.NewGuid();
result.setEdited();
result.setCreated();
return result;
}
}
TauSigma 04.07.2013 15:55 # −1
Ну и расширить ещё:
dormendo 04.07.2013 18:30 # 0
TauSigma 04.07.2013 18:42 # +1
А для того чтобы не загружать сеть направить его через loopback.
dormendo 05.07.2013 07:58 # 0
guest 05.07.2013 00:55 # 0
Именно этот код следует публиковать как ГК.
TauSigma 05.07.2013 16:00 # 0
В противном случае если-бы он делал полный клон, то его стоило-бы назвать DeepClone.
А полный клон, ага, лучше делать через бинарную сериализацию.
В таком случае хоть код и будет красивый, но вот с производительностью будет не очень...
Соответственно, если копировать по полям, то можно пропустить исключение валидации в пропертях.
Ну и лучше чем:
И так ещё 100500 свойств...
guest 05.07.2013 16:09 # 0
Клонирование оно и есть клонирование.
Для поверхностного копирования (shallow copy) есть специальный метод - MemberwiseClone. А все велосипеды идут на юх.
Все велосипедисты идут читать документацию.
dormendo 05.07.2013 16:22 # 0
TauSigma 05.07.2013 16:23 # −1
dormendo 05.07.2013 16:21 # +1
Кстати, бинарная сериализация жутко тормозит на этапе десериализации. На больших графах получалось даже, что сериализаторы WCF начинали выигрывать, если складывать время выполнения пары операций.
TauSigma 05.07.2013 16:42 # −1
Ну, можно вязть на примере (живом):
Есть некое звено, которое использует источник данных:
Данные используются на других узлах. Затем, другая комманда сказала:
- Мы себе тоже хотим себе такие данные при определённом событии.
Замечательно, другая комманда написала сервис:
Если делать так:
То при добавлении пропертей в InputData и/или в OutputData мы получим 3 места за которым придётся следить ручками (входящий набор, исходящий набор и копирование).
Теперь вопрос: А оно надо? :)
dormendo 05.07.2013 16:52 # +1
TauSigma 05.07.2013 18:18 # 0
guest 05.07.2013 00:53 # +1
ОП - нуп. Плюсаторы - ламеры.
dormendo 05.07.2013 08:03 # 0
guest 05.07.2013 21:45 # 0
Чет такое про яву читал. Только в фитоне у лохов deepcopy() есть.
Stertor 09.07.2013 23:45 # −2
IKing 09.07.2013 23:46 # −3