@Toshegg

Как клонировать системный объект в C#?

Здравствуйте!
Я пробую написать мульти-буфер обмена для курсовой. Он работает по следующему принципу: нажимаем Ctrl+C, копируем любой объект в системный буфер (Clipboard), далее с помощью Clipboard.GetDataObject () получаем скопированный объект, и кладем его в массив внутри синглтона (DataObject [] myBuffer). Код:
public void SetData (DataObject data, int index) {
myBuffer [index] = data; }
Обнаружил следующую проблему: все объекты в C# передаются по ссылке, по этому при заполнении моего буфера новым элементом все старые (которые я записал до этого) заменяются на новый добавленный элемент. По сути задача состоит в том, чтобы передать объект Clipboard.GetDataObject() в моей метод SetData по значению, а не по ссылке. Пробовал реализовать интерфейс IClonable для DataObject, но ничего не получилось. Подскажите пожалуйста методы для решения моей проблемы. Заранее спасибо!
  • Вопрос задан
  • 303 просмотра
Пригласить эксперта
Ответы на вопрос 2
Splo1ter
@Splo1ter
.NET Developer (9 years+)
Попробуйте MemberwiseClone, он клонирует рекурсивно объект, соответственно вы имеете не ссылку на объект, а новый объект.
Надеюсь я правильно понял ваш вопрос =)
Но проверьте, у меня есть сомнения что если у копируемого объекта внутри будет ссылка на другой объект то это не сработает.
Ответ написан
Или сериализация, клонирует объект целиком. Может выкинуть исключение.
Если ее делать, то надо сначала сохранять весь объект в память, и только после этого передавать куда либо. Т.к. возможность сериализации всех включенных в объект типов не проверяется до запуска.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы