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

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

0

Такой мечтатель

Я заметил, что у этого блога и у фотоблога программиста Раяна Гослина (Ryan Goslin) есть как минимум один общий читатель: (Надпись на рисунке: «Эй, красотка! Мне правда нравится то, как ты используешь паттерн посетитель для преобразования этой неизменяемой структуры данных. Давай на .NET User Group обсудим за пиццей последний пост Эрика Липперта о новых асинхронных…

0

Всё интереснее и интереснее

Следующий образец вы постоянно видите в программах на языке C#: class Frob : IComparable<Frob> С первого взгляда у вас может возникнуть вопрос, почему в этом коде нет «циклической» зависимости; в конце концов, следующая запись class Frob : Frob является некорректной (*). Однако, при более детальном рассмотрении, она выглядит разумно; Frob – это нечто, что можно…

2

Четкие правила корректности вариантности

Думаю, всем вам будет интересно узнать точное описание того, как именно мы определяем допустимость ключевых слов ”in” и “out” при объявлении параметров типов в C# 4. Я хочу привести здесь это описание по следующим причинам: (1) ради общего интереса и (2) поскольку в результате попытки создать более читабельную версию этого алгоритма в черновике спецификации C#…


В чем разница между ковариантностью и совместимостью по присваиванию?

Я об этом уже неоднократно писал, но думаю, что один момент требует повторения. По мере приближения к выпуску C# 4.0, мне стали попадаться множество документов, статей в блогах и т.п., в которых делается попытка объяснить значения термина «ковариантность» (covariant). Очень сложно дать понятное определение этого термина для людей не знакомых с теорией категорий, но сделать…


Новые видеозаписи

Опять это как-то случилось; люди не перестают записывать меня на видео и выкладывать в интернет. В этих записях вы узнаете, как я выгляжу при освещении сверху и сзади. Типа шпионски. Нам надо было выключить в комнате свет и держать фонарик у меня под лицом. Это было бы, вроде, в десять раз страшнее. В общем, если…


Почему ковариантность массивов типов-значений несогласована?

Еще один интересный вопрос со StackOverflow: uint[] foo = new uint[10];object bar = foo;Console.WriteLine(“{0} {1} {2} {3}”,          foo is uint[], // True  foo is int[],  // False  bar is uint[], // True  bar is int[]); // True Что за ерунда тут происходит? Этот фрагмент кода иллюстрирует интересное, но неудачное противоречие между системой типов CLI…


Почему в ref и out параметрах нет вариантности типов?

Вот хороший вопрос со StackOverflow: Если у вас есть метод, принимающий «X», то вы должны передавать выражение типа X или что-то, приводимое к X. Скажем, выражение производного от X типа. Но если у вас есть метод, принимающий «ref X», то вы обязаны передавать ссылку на переменную типа X, точка. Почему это? Почему бы не разрешить…


Void не вариантен

[ДОПОЛНЕНИЯ ниже] Некоторое время назад я описал вид вариантности, который мы поддерживаем, начиная с C# 2.0. При присваивании группы методов делегату такого типа, что и выбранный метод, и делегат возвращают ссылочный тип, то разрешено ковариантное преобразование. То есть, вы можете сказать: Giraffe GetGiraffe() { … }…Func<Animal> f = GetGiraffe; Это работакт логично, потому что всякий,…