Перегрузка унарного оператора «!»

113
03 октября 2019, 10:00

Как правильно осуществить перегрузку и использовать в дальнейшем данный логический оператор «!». Если сравнивается следующие: если заданная дата(DateTime) день не является последним днём месяца то возвращается true, иначе false. Как перегрузить если это все в созданном классе и как этот перегруженный оператор использовать?( Добавил код:

    public class DaateTime
    {
        private DateTime data;
        public DaateTime()
        {
            data = new DateTime(2000, 01, 01);
        }
        public DaateTime(DateTime data)
        {
            this.data = data;
        }
        public static bool operator !(DaateTime data)
    {
        var day = new DateTime(data.data.Year, data.data.Month, 1);
        day = day.AddMonths(1);
        day = day.AddDays(-1);
        if (data.data.Day == day.Day)
            return false;
        else
            return true;
    }

Как мне теперь это дело вызвать из main? (если конечно всё правильно сделал с оператором) Вот так:

class Program
    {
        static void Main(string[] args)
        {
            DaateTime da = new DaateTime(new DateTime(2000,01,01));
            Console.WriteLine(!da);
            Console.ReadKey();
        }
    }
Answer 1

Оператор для структуры DateTime переопределить нельзя, потому что она имеет пометку sealed. Унарный опрератор кастомного класса, переопределяется без проблем

public class Demo {
public class MyClass {
 DateTime d = DateTime.Now;
 // Переопределили
 public static bool operator !(MyClass a) { 
     return a.d.AddDays(1).Month != a.d.Month;
     }
 // Функция была бы так
 public bool e(){return d.AddDays(1).Month!=d.Month;};
// Можно свойтсво
public bool b { get { return  d.AddDays(1).Month!=d.Month;} }
}
public static void Main() {
   MyClass x = new MyClass();
   Console.WriteLine(!x); // вызов оператора
   }
}

Для унарных операторов - параметр один, оператор должен быть статиком. С точки зрения ООП это тут нарушение, по-хорошему нужно что бы !obj - вернул такой же обьект в инверсном представлении, но среда не мешает вернуть bool вместо, и переопределить как угодно.

Мне кажется - само удобно - свойство. А економия в один символ - ну такое.

READ ALSO
Не могу найти ошибку в коде калькулятора

Не могу найти ошибку в коде калькулятора

есть такой код, который должен рассчитывать по данным стоимость домана сайте это выглядит как два селекта и поле для ввода метража

182
Вывод и редактирование новости php

Вывод и редактирование новости php

Нашел простой гайд как сделать админпанель с возможностью постинга и редактирования постовСделал всё как в видео, но добавление и редактирование...

135
Yandex XML не принимает ip

Yandex XML не принимает ip

У меня в YandexXML след значения:

137
PhpMailer не отправляет письма когда активен ufw

PhpMailer не отправляет письма когда активен ufw

Из соображений безопасности я использую ufw, в нём я открыл порты 80, 443 и 22

131