Почему анонимные типы являются обобщенными?

Предположим, у вас есть анонимный тип в C#: var x = new { A = "hello", B = 123.456 }; Вы когда-нибудь смотрели код, сгенерированный компилятором для этого фрагмента? Если вы откроете скомпилированную сборку с помощью ILDASM или с помощью любой другой утилиты, то увидите следующую мешанину в самом верху объявлений типов .class ‘<>f__AnonymousType0`2′<‘<A>j__TPar’,'<B>j__TPar’> Какого…

2

Ищем людей в Рослин

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

0

Все ваши базы не принадлежат вам[1]

Меня иногда спрашивают, почему в языке C# мы не можем сделать так: class GrandBase { public virtual void M() { Console.WriteLine("GB"); } } class Base : GrandBase { public override void M() { Console.WriteLine("B"); } } class Derived : Base { public override void M() { Console.WriteLine("D"); base.base.M(); // Не корректно! } } Автор последнего…

0

Большое начало, длинный хвост

Ниже представлен граф количества жителей сотни крупнейших населенных пунктов Канады (щелкните на графике, чтобы увидеть увеличенную версию): Обратите внимание на огромный пик в начале этого графика: Торонто, Монреаль и Ванкувер являются довольно крупными городами по любым меркам. Затем идет резкий скачек вниз, к группе из десятка довольно крупных городских районов, включая мой родной регион Китченер-Ватерлоо-Кембридж….

2

Игра битами: что означает предупреждение CS0675?

От высших материй стиля передачи продолжений мы возвращаемся к мирским проблемам игры с конкретными битами. int i = SomeBagOfBits(); ulong u = SomeOtherBagOfBits(); ulong result = u | i; // объединяем их Упс, получаем ошибку. “Оператор | не может применяться к операндам с типами int и ulong”. Битовый оператор ИЛИ определен для типов int, uint,…

0

Асинхронность в C#. Часть 8: опять исключения

(В этом сообщении я буду говорить о внутренних, неприятных, дурных и критических исключениях. Для разъяснения этих терминов, загляните сюда.) Если в вашем процессе происходит необработанное исключение, то явно произошло что-то плохое и непредвиденное. Если это критическое исключение, то шансов спасти процесс у вас уже нет – с ним уже все кончено. Вы можете так и…

0

Асинхронность в C# 5. Часть 7: исключения

Давайте продолжим с того места, где мы остановились (ха-ха-ха!) после небольшого отступления: обработка исключений в таких «возобновляемых» методах, подобных нашим асинхронным методам, кажется немного странной. Чтобы понять, насколько это странно, вам может понадобиться освежить в памяти мою последнюю серию статей о проектировании блоков итераторов, и в особенности сообщение о разнице между push и pull-моделями. В…

0

Доступно четвертое аннотирование издание

Небольшое отступление от C# 5 к C# 4: аннотированная спецификация языка C# 4 теперь доступна в печатном виде от издательства Addison-Wesley. Конечно, удобно иметь спецификацию в печатном виде, особенно если вы собираетесь провести некоторое время, сидя с книгой у камина. (Там несколько сотен страниц; вы можете поддерживать огонь часами.) Однако главное преимущество этого издания по…

0

Асинхронность в C# 5. Часть 6: насколько асинхронно?

Уже несколько людей задали мне вопрос о том, чем руководствовались разработчики языка, требуя, чтобы в объявлении каждого метода, содержащего выражение “await”, присутствовало контекстное ключевое слово “async”. Как и в любом решении, здесь есть свои «за» и «против», которые должны приниматься во внимание в контексте множества противоречивых и несовместимых принципов. Здесь нет простого решения, которое бы…

0

Асинхронность в C# 5. Часть 5: слишком много задач

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

0