У меня много математических типов, таких как Point3, и я сталкиваюсь с дилеммой реализации операторов, экземпляров и статических методов для арифметики.
Так сказать тип Point3
. Где a, b, c - Point3
, я уверен, что смогу сказать:
c = a + b;
Но я должен также реализовать:
c = Point3.Add (a, b);
А это:
c = a.Add (b);
Для меня # 3 бесполезен и менее читабелен, чем # 1. И № 2 кажется бессмысленным, если у вас нет интерфейса для добавления, вычитания, умножения, деления и т. Д.
Что вы рекомендуете? Есть ли какие-либо проблемы или недостатки, связанные с наличием операторов (+, -, *, /)? Не помешает ли это общей арифметике (я знаю, что она не поддерживает ее напрямую, но, возможно, использование статических методов будет полезным в качестве обходного пути)?
Будут ли рекомендации по этому вопросу, будь то класс или структура?
РЕДАКТИРОВАТЬ: Также для № 3, я забыл упомянуть, что это для неизменяемого типа, поэтому возвращает новый Point3, вместо того, чтобы изменить.