Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Присваивание, Присваивание объектов 
V
    Опции темы
Гость_tokaplan
Дата 4.7.2003, 21:06 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Как прированять один объект другому, чтобы в дальнейшем они не были связаны, если в этом классе нет Clone()? (Form)
  Вверх
stab
Дата 6.7.2003, 04:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Экс. модератор
Сообщений: 1839
Регистрация: 1.1.2003

Репутация: 22
Всего: 48



хм, ну можно попробовать покапать в сторону Serializing Objects, ms-help://MS.VSCC/MS.MSDNVS/cpguide/html/cpovrserializingobjects.htm


--------------------
6, 6, 6 - the number of the beast.
PM MAIL WWW   Вверх
AntonSaburov
Дата 11.7.2003, 23:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Штурман
****


Профиль
Группа: Модератор
Сообщений: 5658
Регистрация: 2.7.2002
Где: Санкт-Петербург

Репутация: 6
Всего: 118



Вобщем-то идея с сериализацией неплохая.
Но тогда чем это проще чем реализовать Clone ?
PM MAIL WWW ICQ   Вверх
stab
Дата 12.7.2003, 00:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Экс. модератор
Сообщений: 1839
Регистрация: 1.1.2003

Репутация: 22
Всего: 48



Цитата
Но тогда чем это проще чем реализовать Clone ?


тем что можно один раз написать код для сеарилизации\десеарилизации и использовать для любых объектов любого класса, ну почти для любых smile.gif Для этого надо использовать XmlSerializer, т.е. код такой:

Код

 private void SaveObjectToXMLFile(Type type, object obj, string path)
 {
  XmlSerializer xmls;
  FileStream strm;
 
  strm = new FileStream(path, FileMode.Create);
  xmls = new XmlSerializer(type);
  xmls.Serialize(strm, obj);
  strm.Close();
 }

 private object LoadObjectFromXMLFile(Type type, string path)
 {
  XmlSerializer xmls;
  FileStream strm;
 
  strm = new FileStream(path, FileMode.Open);
  xmls = new XmlSerializer(type);
  object result = xmls.Deserialize(strm);
  strm.Close();
  return result;
 }



использовать так:

Код

SomeType obj;

...

SaveObjectToXMLFile(typeof(SomeType), obj, "c:\\obj.xml");

...

obj = (SomeType) LoadObjectFromXMLFile(typeof(SomeType), "c:\\obj.xml");



на основе этого кода думаю будет не сложно сделать SaveToStream, LoadFromStream smile.gif и сохранять загружать откуда и куда угодно...

что печально, так это то что, для Form я не смог заставить этот код работать..., но для простых типов все работает, знать бы только те причины из-за которых для Form не работает. Где она мера простоты типа? smile.gif

з.ы. фактически все это выжимки из хелпа smile.gif

Это сообщение отредактировал(а) cully - 12.7.2003, 01:06


--------------------
6, 6, 6 - the number of the beast.
PM MAIL WWW   Вверх
PRIZRAK001
Дата 3.1.2006, 01:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 67
Регистрация: 13.7.2005

Репутация: нет
Всего: 1



Я только начинаю изучать C#, до этого писал на С++. И как новичка меня заинтересовала эта тема.

Почему всё так сложно (сериализация, метод Clone())?. Неужели нельзя просто взять и сделать копию объекта? Это не недоработок С# или специально задуманная фича?
PM   Вверх
lovermann
Дата 3.1.2006, 02:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 285
Регистрация: 28.12.2004
Где: Прага

Репутация: 1
Всего: 8



Это незнание предмета smile
PM WWW ICQ   Вверх
mr.DUDA
Дата 3.1.2006, 12:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 110
Всего: 232



Цитата(PRIZRAK001 @ 3.1.2006, 00:27)
Почему всё так сложно (сериализация, метод Clone())?. Неужели нельзя просто взять и сделать копию объекта? Это не недоработок С# или специально задуманная фича?

Согласен с lovermann, объясню почему. Допустим, есть у нас некий класс (во, в рифму сказал smile), хотим мы объект этого класса скопировать. Как прикажете рассматривать набор полей и свойств класса? Все считать копируемыми? Или только public? Может, ещё protected добавить? А свойства надо копировать или нет (учитывая, что свойство может быть вычисляемым или связанным с другим свойством/полем)? Хорошо, допустим выбрали мы (как разработчики .NET и C# smile) некий набор правил копирования, и теперь все разработчики знают, что копируются все поля, а свойства - нет. Отлично, допустим теперь появился некий Вася Пупкин, которому ну никак не подходит то, что свойство его класса не копируется, а поля он не хочет копировать, т.к. только что в институте ему объяснили принципы ООП, и теперь Вася Пупкин в праведном негодовании постит гневные сообщения на все программерские форумы рунета и в саппорт разрабам C# и .NET; те - в панике: "мы же всё предусмотрели!"... Вслед за Васей Пупкиным появляется Петя Иванов, который придумал свой собственный алгоритм копирования, позволяющий копировать не только поля и свойства, но и ресурсные файлы, связанные с классом. Затем появляется статья на codeproject.com, где приводится пример целого copy framework'а с кучей настроек. Через некоторое время появляются коммерческая библиотека FlexCopy, и несколько бесплатных аналогов. Все довольны, все дружно плюются в сторону "этих тупорылых мелкомягких, которые ничего сами не могут сделать как надо"...

Но, слава богу, в нашей реальности всё по-другому. Есть замечательный механизм сериализации, позволяющий настраивать с пом. атрибутов набор копируемых полей и свойств, а также дополнять и перекрывать метод Serialize. Есть интерфейс ICloneable. Никто не решает за тебя, как копировать объект.


--------------------
user posted image
PM MAIL WWW   Вверх
Medved
Дата 3.1.2006, 12:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 7209
Регистрация: 15.9.2002
Где: Kazakhstan, Astan a

Репутация: 3
Всего: 154



Цитата(cully @ 12.7.2003, 03:58)
то печально, так это то что, для Form я не смог заставить этот код работать..., но для простых типов все работает, знать бы только те причины из-за которых для Form не работает. Где она мера простоты типа?


Чтобы твоя форма работала, необходимо чтобы все типы, которые она использует, были сериализуемыми (т.е. имели соответствующий атрибут)
Кроме того, сам класс твоей формы, должен быть помечен этим же атрибутом.
Прочитай про серилизацию в MSDN. Там об этом более подробнее сказано.



--------------------
http://extreme.sport-express.ru/
...и неважно сколько падал, важно сколько ты вставал...
PM MAIL WWW ICQ Skype GTalk   Вверх
PRIZRAK001
Дата 3.1.2006, 13:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 67
Регистрация: 13.7.2005

Репутация: нет
Всего: 1



mr.DUDA
Теперь понятно. Спасибо, что объяснил.

PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0751 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.