• Как обработать производный класс аргументов в делегате принимающем базовый класс аргументов?

    gdt
    @gdt
    Программист
    Я вижу два варианта - простой и правильный.
    Простой состоит в том, что все ваши методы будут иметь сигнатуры базового класса, и в каждом наследнике вы будете кастовать аргументы к нужному типу:
    if (args is ConcreteArgs concreteArgs)
    {
        // do something with concreteArgs
    }

    Это в целом не очень удобно, но просто и работает.

    Правильный (на мой взгляд) вариант состоит в том, чтобы использовать шаблон программирования "посетитель", вот на хабре есть статья где рассматривается вычисление площади различных фигур - https://habr.com/ru/post/332042/.

    Ещё есть вариант сделать класс generic, который принимает тип аргументов, и наложить констрейнт where T : FunctionArgs.
    Ответ написан
    Комментировать