Bạn sẽ không thể làm việc xung quanh nó có giao diện C++, vì a = b; có ngữ nghĩa khác trong C++ so với C#. Trong C#, a = b; làm cho một điểm đến cùng một đối tượng như b. Trong C++, a = b thay đổi nội dung của a. Cả hai đều có thăng trầm. Giống như bạn làm
MyType * a = new MyType();
MyType * b = new MyType();
a = b; /* only exchange pointers. will not change any content */
Trong C++ (nó sẽ mất tham chiếu đến đối tượng đầu tiên và tạo rò rỉ bộ nhớ. Nhưng hãy bỏ qua ở đây). Bạn không thể quá tải toán tử gán trong C++ cho điều đó.
Cách giải quyết rất dễ dàng:
MyType a = new MyType();
MyType b = new MyType();
// instead of a = b
a.Assign(b);
Disclaimer: Tôi không phải là một nhà phát triển C#
Bạn có thể tạo một ghi-chỉ-bất động sản như thế này. sau đó làm a.Self = b; ở trên.
public MyType Self {
set {
/* copy content of value to this */
this.Assign(value);
}
}
Bây giờ, đây là không phải. Vì nó vi phạm nguyên tắc ít nhất là bất ngờ (POLS). Người ta sẽ không mong đợi một sự thay đổi nếu người ta làm a.Self = b;
Nguồn
2008-11-15 15:44:01
Giải thích vấn đề này (tại sao bạn cần nó). – Shog9
Xin lỗi, có lẽ tôi nên cụ thể hơn. Tôi đang làm một lớp Số tùy chỉnh cho phép toán số học với số lượng rất lớn và tôi muốn nó có giao diện của các kiểu số được tích hợp như int, decimal, v.v. Tôi đã quá tải toán tử số học, nhưng nhiệm vụ còn lại ... –
Cảm ơn - tôi đã thêm nhận xét của bạn vào chính câu hỏi đó. – Shog9