- Все точки - это векторы, а все векторы - это точки.
- Все направления являются векторами, а НЕ все векторы являются направлениями (это не должно означать, что нельзя разрешить преобразование в обоих направлениях).
Я хочу, чтобы операторы были переопределены раз и навсегда, желательно, поскольку все они полностью идентичны. В C ++ я могу просто определить класс Vector {float x, y, z; } и выполните typedef Point = Vector, typedef Direction = Vector; В C # нет эквивалента («using Point = Vector;» - отстой, так как вы должны поместить его в каждый используемый вами документ, и он не применяется компилятором).
Я попытался определить 3 разных класса и переопределить операторы для каждого из них, затем выполнить неявное приведение типов, что замедляло бы выполнение кода и т. Д.
Я попытался определить только Вектор, затем Точка: Вектор и Направление: Вектор, таким образом я пишу операторы только один раз, но тогда я не могу выполнить неявное приведение типа Точка <-> Вектор или Направление <-> Вектор.
Я мог бы просто определить класс Vector и использовать его повсеместно, но это создало бы двусмысленность в отношении того, должна ли переменная быть позицией в пространстве (Point), относительной позицией в пространстве (Vector) или единичным вектором ( Направление). Например, функция:
Vector GetOrthogon(Vector a, Vector b) {
// ....
}
Вы не можете знать, ожидает ли он каких-либо векторов или единичных векторов. В C ++ вы могли бы сделать это, так почему бы не в C #?
Примечание : если это возможно, наличие структур вместо классов было бы идеальным.