У меня есть вариант на классе количества (Fowler), который предназначен для облегчения преобразования между единицами. Тип объявлен как:Рефакторинг с дженериками
public class QuantityConvertibleUnits<TFactory>
where TFactory : ConvertableUnitFactory, new() { ... }
Для того, чтобы сделать математические операции между разнородными единицами, преобразовать правую часть операции на эквивалентное количество независимо от блока левая находится, и делать математику на сумму (которая является двойной) перед созданием нового количества. Внутри родового класса Количества, у меня есть следующий:
protected static TQuantity _Add<TQuantity>(TQuantity lhs, TQuantity rhs)
where TQuantity : QuantityConvertibleUnits<TFactory>, new()
{
var toUnit = lhs.ConvertableUnit;
var equivalentRhs = _Convert<TQuantity>(rhs.Quantity, toUnit);
var newAmount = lhs.Quantity.Amount + equivalentRhs.Quantity.Amount;
return _Convert<TQuantity>(new Quantity(newAmount, toUnit.Unit), toUnit);
}
protected static TQuantity _Subtract<TQuantity>(TQuantity lhs, TQuantity rhs)
where TQuantity : QuantityConvertibleUnits<TFactory>, new()
{
var toUnit = lhs.ConvertableUnit;
var equivalentRhs = _Convert<TQuantity>(rhs.Quantity, toUnit);
var newAmount = lhs.Quantity.Amount - equivalentRhs.Quantity.Amount;
return _Convert<TQuantity>(new Quantity(newAmount, toUnit.Unit), toUnit);
}
... same for multiply and also divide
Мне нужно, чтобы получить право печатания для бетона Количества, так пример надстройки цита выглядит следующим образом:
public static ImperialLengthQuantity operator +(ImperialLengthQuantity lhs, ImperialLengthQuantity rhs) { return _Add(lhs, rhs); }
Вопрос заключается в эти подробные методы в классе Quantity. Единственным изменением между кодом является математический оператор (+, -, * и т. Д.), Поэтому кажется, что должен быть способ реорганизации их в общий метод, но я просто не вижу его.
Как я могу реорганизовать этот код?
Cheers,
Berryl
Сладкий раствор. Благодаря! – Berryl