Динамическое заражение, часть вторая

В прошлый раз мы обсуждали, как параметр «dynamic» стремится расшириться по программе подобно вирусу: если выражение типа dynamic «касается» другого выражения, то последнее зачастую тоже становится типа dynamic. Сегодня я хочу остановиться на менее всего понимаемом аспекте вывода типа метода, который также применяет модель заражения, когда в игру вступает параметр «dynamic». Постоянные читатели знают, что…

0

Динамическое заражение, часть первая

  Предположим, что вы эпидемиолог, моделирующий возможное распространение сильно заразной болезни. Прямой способ моделирования серии прискорбных событий – предположить, что население может быть разделено на три категории: определенно зараженных, определенно здоровых и возможно зараженных. Если здоровый встречается с зараженным или возможно зараженным, то он переходит в категорию возможно зараженных. (Или, иначе, категория возможно зараженных транзитивно…

1

Группа из одного метода

На этой неделе я реализовывал семантический анализ динамических выражений в проекте Roslyn, так что я исследовал множество вопросов со своей командой, касающихся дизайна динамических возможностей в C# 4. В этом контексте мне очень часто задают следующий вопрос: public class Alpha {   public int Foo(string x) { … } } … dynamic d = whatever;…

1

C# – это строго типизированный или слабо типизированный язык?

Сегодняшний пост, как обычно будет представлен в виде диалога. C# – это строго типизированный или слабо типизированный язык программирования? Да. Ответ не очень-то полезный. Я серьезно. Любопытно, что если вы перефразируете свой вопрос так, чтобы в нем было «И», то ответ будет таким же. Что? Вы имеете в виду, что C# является и строго типизированным…

3

Как убедиться, что вывод типов метода завершится?

Я все пропустил! Я подготовился к огромной волне анонсов по поводу выхода языка TypeScript, но форс-мажорные семейные обстоятельства оторвали меня от компьютеров, и я не добавил свою статью в очередь на публикацию. Достаточно будет сказать, что мне ОЧЕНЬ И ОЧЕНЬ нравится идея языка TypeScript. Постоянные читатели этого блога знают, что я длительное время занимался ECMAScript,…

0

Загадка с оператором «is». Часть 2

Как я и говорил в прошлый раз, это загадка была довольно простой: мы получим такое поведение, если FooBar или тип локальной переменной x будут параметром типа (type parameter). Т.е.: void M<FooBar>() {   int x = 0;   bool b = x is FooBar;  // корректно, true если FooBar – это int.   FooBar fb…

1

Загадка с оператором «is». Часть 1

  Возможно, что в программе с некоторой локальной переменной x: bool b = x is FooBar; во время исполнения присваивается b значение true, даже если преобразование типов (явное или неявное) переменной x к FooBar запрещено компилятором! Т.е. выражение: FooBar foobar = (FooBar)x; в той же самой программе не будет компилироваться. Можете ли вы придумать подобный…

3

Не смешивайте out-параметры и LINQ

Я вернулся из ежегодного отпуска, проведенного в прекрасном месте на юго-западе Онтарио; прежде чем переходить к теме сегодняшнего поста, посмотрите на снимок, сделанный с помощью Windows Phone при возвращении домой. Мы находимся на высоте 37000 футов сразу за городом Биллингс, штат Монтана, за несколько минут до захода солнца: Все небо было заполнено молниями, которые, к…

1

Должен ли C# выдавать предупреждения на использование пустых ссылок

Как вы наверное знаете, компилятор языка C# анализирует константы для поиска недостижимого кода. В следующем методе компилятор предупреждает о том, что вызов метода является недостижимым. const object x = null; void Foo() {   if (x != null)   {     Console.WriteLine(x.GetHashCode());   } } Предположим, мы уберем “if” и оставим лишь вызов метода. const…

1

Глупая последовательность глупа

Сегодняшний пост как обычно будет представлен в виде диалога. Почему в некоторых случаях использование ключевого слова var является обязательным для неявно типизированной локальной переменной, а иногда его использование запрещено? Это хороший вопрос, но нельзя ли немного конкретики? Для начала стоит перечислить случаи, когда неявно типизированная локальная переменная должна, а иногда не должна использовать var. Конечно….

2