Я работаю над некоторым кодом моделирования в C #, и у меня есть некоторый код в виде строк:
public void predict(Point start, Point end)
{
end.velocity = start.velocity + dt * end.acceleration;
end.position = start.position + dt * end.velocity;
}
Где позиция, скорость, ускорение - это некоторые векторные типы данных, которые я определил с помощью связанных операторов.
А также код, в котором я работаю:
StartPoint = EndPoint;
EndPoint = CurrentPoint;
. * Точки являются экземплярами Точек, которые имеют несколько примитивных (двойных) и не примитивных (векторных) типов данных.
Я столкнулся с (очевидной) проблемой, заключающейся в том, что приведенный выше код, скорее всего, просто установит StartPoint, чтобы он указывал на данные, которые ранее были EndPoint, а EndPoint будет указывать на CurrentPoint.
Имеется в виду, что если я снова изменю CurrentPoint, я в конечном итоге случайно изменю EndPoint.
В C ++ это просто предотвратить, поскольку я могу определить свой оператор присваивания, чтобы сделать глубокую копию базовых данных в моих объектах Point,Как я могу предотвратить это в C #?
Спасибо за любую помощь!
Редактировать: Класс Vector определяется как
[Serializable]
public class Vector
{
private Double[] data = new Double[Constants.Dimensions];
... snip ...
public static Vector operator +(Vector lhs, Vector rhs)
{
Vector result = new Vector();
for (UInt32 i = 0; i < Constants.dimensions; i++)
result[i] = lhs[i] + rhs[i];
return result;
}
lots more code here
}