Это самое прекрасное время года

Вот небольшое праздничное приветствие для всех вас. Ну, или, по крайней мере, для жителей стран Содружества наций. static object M<T>(T t) where T : struct{  return t;} int ii = 10;int? jj = 20;object xx = ii;object yy = jj;System.ValueType zz = ii;IComparable aa = ii;System.Enum bb = MidpointRounding.ToEven;object cc = M(ii); Желаю всем вам…


Используйте правильные инструменты

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


Ограничения не являются частью сигнатуры метода

Что произойдет в этом случае? class Animal { } class Mammal : Animal { } class Giraffe : Mammal { }class Reptile : Animal { } …static void Foo<T>(T t) where T : Reptile { }static void Foo(Animal animal) { }static void Main() {     Foo(new Giraffe()); } Большинство людей предполагает, что при разрешении перегрузки…


Преобразования запросов являются синтаксическими

Как вы, вероятно, знаете, в C# существует два варианта написания LINQ-запросов. Лично я предпочитаю использовать «выражение запроса» (query comprehension): from customer in customerListwhere customer.City == “London” select customer.Name Или вы можете получить аналогичное поведение с помощью синтаксиса «на основе метода»: customerList.Where(customer=>customer.City == “London”).Select(customer=>customer.Name) Эти два варианта гарантированно эквивалентны, поскольку компилятор просто преобразовывает выражение с первым…


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

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


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

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


Раскрытие цели

Весьма любопытно, что так никто и не догадался, зачем в компиляторе мне понадобился код для преобразования списка аргументов метода в формат, при котором вначале выполняются выражения, содержащие побочные эффекты, эти результаты сохраняются в переменных, а затем уже выполняется метод с переменными, не содержащими побочных эффектов. Хотя в комментариях определенно были просто замечательные идеи по этому…


Всегда пишите спецификацию. Часть 2

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


Всегда пишите спецификацию, часть 1

У Джоэла Спольски несколько лет назад была отличная серия статей о преимуществах написания функциональных спецификаций, определяющих, как продукт выглядит для пользователя. Я хочу немного поговорить о технических спецификациях, которые содержат описания внутреннего устройства решения. Немного ранее, я писал о том, как для вроде бы простого фрагмента кода я начал с написания технической спецификации, а уже…


Замыкания на переменных цикла. Часть 2

Спасибо всем, кто оставил содержательные и глубокие комментарии для предыдущего сообщения[1]. Большинству стран действительно стоит применить методы «мажоритарно-преференциального[2]» голосования. Эта же система лучше подходит гикам. Многие оставили свои мнения в форме: «Я бы хотел, чтобы вы внесли изменения, но если не можете, тогда выдавайте предупреждения». Или «Не вносите изменения, просто добавьте предупреждения» и т.д. Но…