En C#, tengo una clase vectorial 3D simple.C# = problema del operador
static void Main(string[] args)
{
Vector3D a, b;
a = new Vector3D(0, 5, 10);
b = new Vector3D(0, 0, 0);
b = a;
a.x = 10;
Console.WriteLine("vector a=" + a.ToString());
Console.WriteLine("vector b=" + b.ToString());
Console.ReadKey();
}
la salida es,
vector a = 10, 5, 10
vector b = 10, 5, 10
asigno un hacha antes de que cambie a 10. Así i esperaba
vector a = 10, 5, 10
vector b = 0, 5, 10
Por lo que entiendo = ¿el operador asigna una referencia al objeto como un puntero? Y en C# no puedo sobrecargar = operador.
¿Debo asignar manualmente cada propiedad?
La mejor práctica aquí sería hacer que un tipo * inmutable *, ya sea un tipo de referencia o un tipo de valor, no importe. Los vectores son lógicamente * valores *. Cuando sumas de cuatro a doce, lógicamente no "muta" los dos en seis y mantienes uno igual. Haces un número completamente nuevo por completo. De manera similar, cuando cambias la coordenada x de un vector, no cambias la coordenada x y mantienes igual a y y z: creas un vector completamente nuevo. Descubrirá que es mucho más capaz de razonar sobre matemáticas vectoriales si trata los valores como valores, no como estado mutable. –