[sửa] về việc làm rõ: Theo tôi hiểu, bạn có N đối tượng, mỗi đối tượng có một tham chiếu (trực tiếp) đối tượng mẫu. Bạn muốn viết lại mẫu để tất cả các đối tượng "nhìn thấy" những thay đổi này.
Đề xuất: imlement một nhà môi giới mẫu.
class TemplateProvider
{
public MyData Template { get; set; }
}
Thay vì truyền mẫu, chuyển nhà cung cấp mẫu tới các đối tượng.
để đơn giản hóa cú pháp trong các thành phần, bạn có thể thêm (riêng tư/nội bộ?) property
MyData Template { get { return m_templateProvider.Template; } }
void UpdateTemplate() { m_templateProvider.Template =
(MyData) this.MemberwiseClone(); }
Nhà cung cấp mẫu cũng đơn giản hóa khóa trong các tình huống đa luồng.
Tóm lại, không có cách nào trừ khi bạn tự làm. Nhưng tại sao không tạo ra một đối tượng mới nếu bạn ghi đè lên tất cả các thuộc tính?
memcopy
và các cấu trúc mức thấp tương tự không được hỗ trợ vì chúng làm giảm sự đảm bảo của môi trường.
Bản sao nông cho cấu trúc được thực hiện bằng cách gán. Đối với các lớp học, MemberwiseClone
là phương pháp để làm điều đó - nhưng khi bạn nói rằng tạo ra một đối tượng mới.
Không có cách nào được xây dựng cho điều đó và vì nó có khả năng phá vỡ đóng gói nên được sử dụng cẩn thận.
Bạn có thể xây dựng một thói quen chung bằng cách sử dụng sự phản chiếu, nhưng cho dù nó hoạt động hay không phụ thuộc vào chính lớp đó. Và có, ti sẽ được so sánh chậm.
Những gì còn lại là hỗ trợ nó bằng giao diện tùy chỉnh. Bạn có thể cung cấp một thường xuyên "Shallow Copy" thường xuyên để kiểm tra giao diện và sử dụng nó, và rơi trở lại để phản ánh khi nó không. Điều này làm cho chức năng này có sẵn nói chung và bạn có thể tối ưu hóa các lớp có hiệu suất nào quan trọng sau này.
Ông muốn biết, làm thế nào người ta có thể sao chép nội dung của một đối tượng A * vào * một đối tượng B hiện có, trọng tất cả các nội dung của nó. MemberwiseClone tạo một đối tượng * mới *. –