Почему C#/CLR не поддерживает переопределение метода co/contra-variance?

Модель программирования в V4 является новой и не использует контроллеры. Вместо этого вы создаете класс, реализующий IBot, который вы затем регистрируете, используя idiomatic .NET Core API конфигурации во время запуска. В частности, вы звоните services.AddBot(…) в ConfigureServices, а затем appBuilder.UseBotFramework() в Configure.

Вы можете взглянуть на Startup.cs из «пустого» бота в сэмплах , чтобы увидеть пример этого.

Оттуда я предлагаю прочитать документацию «Как работают боты» для V4 , чтобы получить хороший общий обзор основных понятий, таких как повороты и контекст поворота, в V4.

13
задан thecoop 7 May 2009 в 21:29
поделиться

3 ответа

Эрик Липперт уже ответил на этот вопрос лучше, чем я.

Ознакомьтесь с его серией статей о ковариации и контравариантности в C #

и

Как происходит общая ковариация в C # 4.0. & Contra-variance Implmeneted?

РЕДАКТИРОВАТЬ: Эрик указал, что он не говорит о согласованности возвращаемых типов, но я решил сохранить ссылку в этом ответе, потому что это классная серия статей, и кто-то может найти ее полезной при поиске вверх по этой теме.

Эта функция была запрошена , и почти 5 лет назад Microsoft ответила: «Спасибо, что записали это в журнал. Мы часто слышим этот запрос. Мы рассмотрим его в следующем выпуске. "

А теперь я процитирую Джона Скита, потому что это не был бы правильный ответ на StackOverflow без ответа Джона Скита. заключается в реализации CLR а не в какой-либо глубокой смысловой причина - CLR, вероятно, нужно знаю, собирается ли быть возвращаемым значением, чтобы сделать соответствующие вещи со стеком. Тем не менее, это кажется немного жаль, в с точки зрения элегантности. Я не могу сказать я когда-либо чувствовал потребность в этом на самом деле жизнь, и это было бы достаточно легко подделать (до четырех параметров) в .NET 3.5 просто написав конвертер от Func до Action , Func to Action и т. д. Это немного мешает хотя :)

3
ответ дан 2 December 2019 в 02:18
поделиться

Это так, вам просто нужно дождаться VS2010 / .Net 4.0.

-1
ответ дан 2 December 2019 в 02:18
поделиться

Чтобы расширить ответ Джоэла, среда CLR уже давно поддерживает ограниченную дисперсию, но компилятор C # не использует их до версии 4.0 с новыми модификаторами «in» и «out». общие интерфейсы и делегаты. Причины сложны, и я бы запутался, пытаясь объяснить, но это не так просто, как кажется.

Повторное преобразование «защищенного внутреннего» метода в «открытый» метод; вы можете сделать это с помощью метода сокрытия:

public new void Foo(...) { base.Foo(...); }

(пока все аргументы и т. д. также общедоступны) - какое применение?

-1
ответ дан 2 December 2019 в 02:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: