Сам класс был бы довольно простым, просто имея три обнуляемых числа для компонентов даты. (Вы могли бы даже сделать это структурой, если хотите прочитать, как правильно реализовать структуру.)
Что немного усложняет, так это обработка особых случаев, таких как:
new PartialDate(29, 2, null); // occurs only on leap years
new PartialDate(31, null, null); // occurs only seven months in a year
(Кроме того, взгляните на порядок параметров year,month,day
, используемый в структуре DateTime
, возможно, вы захотите скопировать этот шаблон, а не придумывать новый.)
Альтернативой отдельному классу может быть базовый класс с конкретными реализациями для отдельных видов дат:
new MonthlyPartialDate(1); // the first every month
new YearlyParticalDate(2, 1); // the first of february
new YearlyPartialDate(2); // february