Вы не сможете обойти это, имея внешний вид C ++, так как a = b; имеет другую семантику в C ++, чем в C #. В C # a = b; указывает на тот же объект, как б. В C ++ a = b изменяет содержимое a. У обоих есть свои взлеты и падения. Это как вы делаете
MyType * a = new MyType();
MyType * b = new MyType();
a = b; /* only exchange pointers. will not change any content */
В C ++ (он потеряет ссылку на первый объект и создаст утечку памяти. Но давайте проигнорируем это здесь). Для этого нельзя перегрузить оператор присваивания в C ++.
Обойти это легко:
MyType a = new MyType();
MyType b = new MyType();
// instead of a = b
a.Assign(b);
Отказ от ответственности : я не разработчик на C #
Вы можете создать свойство только для записи, как это. тогда сделайте a.Self = b; выше.
public MyType Self {
set {
/* copy content of value to this */
this.Assign(value);
}
}
Так вот, это не хорошо. Так как это нарушает принцип наименьшего удивления (POLS). Нельзя ожидать, что a изменится, если он сделает a.Self = b;