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