Смотрите на Joda-разовый ( https://www.joda.org/joda-time / ).
DateTimeFormatter parser = ISODateTimeFormat.date();
DateTime date = parser.parseDateTime(dateString);
String nextDay = parser.print(date.plusDays(1));
Тег "dispatch" в этом вопросе вполне уместен: то, что вы хотите, называется «множественная отправка». C # (как и большинство основных языков) поддерживает только «однократную отправку», когда выполняемый метод выбирается исключительно на основе (времени выполнения) типа объекта, для которого вы вызываете метод, а не типа (времени выполнения) его аргументов.
Паттерн посетитель часто можно использовать для решения этой проблемы. Идея состоит в том, что вы даете DocumentFieldBase
метод (который вы переопределяете в конкретных подклассах), который вызывает метод в Control
(также переопределяемый в конкретных подклассах), который выполняет фактическую работу.
К сожалению, исходный код класса Control
, вероятно, не находится под вашим контролем * ... так что вам придется прибегнуть к еще более хакерскому решению. Принятый ответ на этот вопрос дает ответ, в котором используется отражение.
До C # 4 вся перегрузка выполнялась во время компиляции. Вы должны использовать двойную отправку или шаблон посетителя для эффективной перегрузки во время выполнения, и это быстро становится беспорядком.
В C # 4 вы можете объявить переменную как динамическую и позволить всем разобраться во время выполнения:
foreach (DocumentFieldBase field in fields){
dynamic control = FindControl(field.Identifier);
Bind(control, field)
}
Очевидно, что на данный момент это не очень помогает (если вы не используете VS2010b1).
Один из вариантов - использовать карту от типа
до Action
, но затем у вас возникают проблемы с наследованием ... (вам, возможно, придется продолжать работать с иерархией типов от конкретного типа до объекта, пока вы не найдете запись на карте). Вам также все равно нужно будет привести к нужному типу внутри действия: (
Не могли бы вы иметь абстрактный нестатический метод Bind ()
в DocumentFieldBase, а затем выполнять понижающее преобразование внутри реализации каждого конкретного класса? Каждый класс DocumentFieldBase
знает, какой тип Control
он получает, не так ли?