IProgress не видит ProgressChanged

Создал новый проект и делаю


            IProgress<int> progress = new Progress<int>();
            progress.ProgressChanged += (s, n) =>
            {

            };

А он пишет Ошибка CS1061 "IProgress<int>" не содержит определения "ProgressChanged", и не удалось найти доступный метод расширения "ProgressChanged", принимающий тип "IProgress<int>" в качестве первого аргумента (возможно, пропущена директива using или ссылка на сборку)..
Чё у него опять началось? :dizzy_face: Какие аргументы ему нужны?
Здесь ведь работает

Так документацию надо смотреть )

IProgress это интерфейс для сообщения прогресса (чтоб передать куда-то и оно вызывало Report).
ProgressChanged в Progress.

А, то есть, обязательно вот так надо


            Progress<int> p = new Progress<int>();
            p.ProgressChanged += (s, n) =>
            {

            };
            IProgress<int> progress = p;
            progress.Report(...);

Я думал, это сократить можно :man_shrugging:

Странно создавать Progress, а потом присваивать его в интерфейс.

Тут это и не надо, в Progress все есть.

В этом есть смысл не тогда, когда всё в одной функции, а когда это передается в другую функцию/класс. По идее так гибче, можно поменять реализацию не меняя везде тип. И так уменьшается сложность, если какой-то компонент должен только сообщать прогресс, то зачем ему давать возможность делать другие штуки.

Правда странно, что для сообщения прогресса есть интерфейс, а для подписывания на получения нет.

Что всё?

Методы всех интерфейсов и его собственные методы.

Метода Report нет. Есть только ProgressChanged и больше ничего :man_shrugging:

хм, да, тут зачем-то применили эту фичу языка:

По идее она больше для случаев когда надо в классе реализовать несколько интерфейсов с той же сигнатурой функции.