- Todos los puntos son vectores, y todos los vectores son puntos.
- Todas las direcciones son vectores, NO todos los vectores son direcciones (esto no debería significar que ambas formas de conversión no deberían permitirse).
Quiero tener los operadores anulados de una vez por todas, de preferencia, ya que son todos completamente idénticos. En C++ puedo simplemente definir la clase Vector {float x, y, z; }, y escribe typedef Point = Vector, typedef Direction = Vector; En C# no hay equivalente ("usando Point = Vector;" apesta ya que tiene que colocarlo en cada uno de los documentos que usa, y el compilador no lo aplica).La mejor forma de implementar estas 3 clases en C#: Vector, Dirección (unidad de vector), Punto
Me trataron de definir diferentes clases 3 y anular los operadores para cada uno, y luego hacer la colada tipo implícito que haría que el código se ejecute más lento, etc.
intenté definir simplemente vectorial, entonces Point: Vector y dirección: Vector, de esta manera solo escribo los operadores una vez pero luego no puedo hacer el lanzamiento de tipo implícito Punto < -> Vector o Dirección < -> Vector.
Podría simplemente definir la clase Vector y usar eso en todas partes, pero eso crearía ambigüedad en cuanto a clima una variable se supone que es una posición en el espacio (Punto), una posición relativa en el espacio (Vector) o un vector unitario (Dirección). Por ejemplo, la función:
Vector GetOrthogon(Vector a, Vector b) {
// ....
}
No se puede saber si se esperan vectores o vectores unitarios. En C++ puedes hacer eso, ¿por qué no en C#?
Nota: tener structs en lugar de clases sería ideal si es posible.
Si son * exactamente * el mismo código, ¿por qué no una clase con un nombre más genérico? ¿Estás usando información en tiempo de ejecución para obtener el tipo que es? – crashmstr