[править] относительно вашего разъяснения:
Как я понимаю, у вас есть N объектов, у каждого есть (прямая) ссылка на объект шаблона. Вы хотите записать обратно в шаблон, чтобы все объекты «увидели» эти изменения.
Предложение: реализовать брокера шаблонов.
class TemplateProvider
{
public MyData Template { get; set; }
}
Вместо передачи шаблона передайте поставщик шаблона объектам.
Для упрощения синтаксиса в компонентах вы можете добавить свойство (личное / внутреннее?)
MyData Template { get { return m_templateProvider.Template; } }
void UpdateTemplate() { m_templateProvider.Template =
(MyData) this.MemberwiseClone(); }
Поставщик шаблонов также упрощает блокировку в многопоточных сценариях.
Короче говоря, ни за что, если вы не сделаете это сами. Но почему бы не создать новый объект, если вы все равно переопределите все свойства?
memcopy
и подобные низкоуровневые конструкции не поддерживаются, поскольку они подрывают гарантии, предоставляемые окружающей средой.
Мелкая копия конструкций создается по назначению. Для классов MemberwiseClone
является методом, который делает это, но, как вы говорите, создает новый объект.
Для этого нет встроенного способа, и, поскольку он потенциально нарушает инкапсуляцию, его следует использовать с осторожностью.
Вы можете создать общую подпрограмму, используя отражение, но будет ли она работать или нет, зависит от самого класса. И да, это будет сравнительно медленно.
Осталось только поддержать его пользовательским интерфейсом. Вы можете предоставить стандартную подпрограмму «Мелкое копирование», которая проверяет интерфейс и использует его, а затем возвращает к отражению, если этого не происходит. Это делает функциональность доступной в целом, и вы можете оптимизировать классы, для которых производительность важна позже.