Перегрузка оператора сложения в собственном классе Date

У меня есть класс, который мне пришлось создать для дальнейшей работы с лабораторной. Сразу предупреждаю, я знаю о DateTime, просто работа в таком формате необходима.

class Date
    {
        private int _year;
        private int? _month;
        private int? _day;
        public int Year { get { return _year; } }
        public int Month
        {
            get
            {
                if (_month.HasValue == false)
                    return 1;

                return _month.Value;
            }
        }
        public int Day
        {
            get
            {
                if (_day.HasValue == false)
                    return 1;

                return _day.Value;
            }
        }

        private DateTime _date;
        public DateTime DateTime { get { return _date; } }
        public Date(int year, int? month = null, int? day = null)
        {
            _year = year;
            if (!CorrectYear(year))
                throw new Exception("Неверный формат ввода даты года");

            _month = month;

            if (month != null && !CorrectMonth(month))
                throw new Exception("Неверный формат ввода даты месяца");

            _day = day;

            if (day != null && !CorrectDay(day))
                throw new Exception("Неверный формат ввода даты дня");

            _date = new DateTime(Year, Month, Day);

        }

        public override string ToString()
        {
            return _date.ToString();
        }
        public string ToString(string format)
        {
            return _date.ToString(format);
        }

В нем также есть проверка на високосность и проверка корректности ввода даты, но убрал, чтобы не загромождать здесь вопрос.

Теперь мне нужно чтобы я мог складывать, вычитать, сравнивать и искать min и max значения среди переменных, значений моего класса. Прошу помощи в написании "сложения", то есть перегрузки оператора +, прикрепляю код моей попытки, но она неудачна как минимум в том, что нужно учитывать что месяцев 12, также как и дней не больше 31, а у меня может быть при сложнее гораздо больше, что того, что того, поэтому я оказался в тупике и прошу помощи.

Этот нерабочий метод сложения:


        public static Date operator +(Date firstDate, Date secondDate)
        {
            int year = firstDate._year + secondDate._year;
            int? month = firstDate._month + secondDate._month;
            int? day = firstDate._day + secondDate._day;
            Date date = new Date(year, month, day);
            return date;
        }

Ответы (0 шт):