войти зарегистрироваться

.NETC#: Этюды, часть 7

Сегодня простой этюд, почти без кода.

Допустим, есть некий класс и его статический конструктор:
static C()
{ Console.WriteLine("from static ctor"); }

Как известно, статические конструкторы вызываются до первого использования типа. Других ограничений нет, поэтому время его вызова вы не можете контролировать (он может вызваться как в самом начале программы, так и при первом обращении). В частности, если два класса используют друг друга в статических конструкторах, поряд вызова этих конструкторов не определен.

В общем, все очень сложно. Тем не менее, напишите код, который гарантированно вызывает указанный выше статический конструктор как раз в нужном месте.

Console.WriteLine("before static ctor");
// нужно вызвать здесь
Console.WriteLine("after static ctor");

.NETC#: Этюды от Эрика Липперта

Возможно, вам нравятся головоломки и C#, и, может быть, вы даже решали некоторые из них в моем блоге здесь, на Хабре.

Теперь у вас есть возможность попробовать свои силы в решении головоломок более высокого уровня.

Если вы не слышали о парне по имени Эрик Липперт, то очень советую почитать его блог. Эрик — один из разработчиков компилятора C# и часто пишет о разных необычностях и странностях в работе компилятора и среды исполнения .NET, а главное, объясняет причины такого поведения. Он пишет настолько интересно и увлекательно, что у его блога даже есть перевод на русский.

В своей записи от 8 июля Эрик дает ссылку на видео, в котором он и Neal Gafter (который также является одним из разработчиков платформы .NET) рассматривают несколько головоломок на языке C#. Пока я успел посмотреть только три из них, но мне уже нравится их уровень. (Внимание: за каждой головоломкой идет ответ, если хотите подумать самостоятельно, не забывайте нажимать на паузу)

Рекомендую всем, кто хочет расширить свой познания в C#/.NET.

UPD: поскольку с отображением видео есть определенные проблемы, можно скачать видео напрямую. Для этого идем сюда, вводим в строке поиска puzzlers и выбираем справа Download

UPD2: проблемы с воспроизведением видео на исходном сайте скорее правило, чем исключение, поэтому я залил файл на файлообменник: depositfiles.com/files/7ej8pu7zt

Персональные блоги C#: Этюды, часть 6

Со времени последнего этюда прошло очень много времени, но я надеюсь, что хабраюзеры не успели утратить интерес к C#.

В этот раз задачка довольно простая, но новичкам в шарпе она может оказаться полезной. Есть следующий код:

Персональные блоги C#: Этюды, часть 5

Хабраюзеры нашли решение предыдущего этюда, но я решил вдобавок продемонстрировать свое (там же)

С внутренностями .NET пока остановимся, потому что придумать этюд на эту тему оказалось несколько сложнее, чем я думал: не хватает элемента неожиданности, ощущения «нерешаемости» задачи.

У сегодняшней задачки, надеюсь, с этим все будет в порядке :)

Персональные блоги C#: Этюды, часть 4

Продолжение, предыдущая часть здесь

Итак, сегодня мы с Вами с помощью молотка и лопаты попытаемся сделать трепанацию черепа влезть во внутренности .NET.

Имеется простейший класс: class X { public int Val; }. При создании объекта этого класса какой реальный размер он будет занимать? И какие значения будут содержать дополнительные поля? Предъявите доказательство в виде кода на C# ;)

.NETC#: Этюды, часть 3

В предыдущей части было предложено три разных по своей сути решения.

Сегодня — новая загадка, из области ASP.NET. Её основное отличие от предыдущих в том, что я столкнулся с ней в реальной ситуации, и пришлось потратить время, чтобы разобраться, в чем же дело.

Итак, на странице Test.aspx имеется код:


.NETC#: Этюды, часть 2

Продолжение, начало здесь

Начну с соцопроса: какие Вы знаете способы выполнить код до начала функции Main() (надеюсь, что перечислят все известные мне и парочку неизвестных :) )?

А теперь задачка:

Перед Вами небольшой код, выводящий два символа (кстати, проверьте себя: в каком порядке они выведутся?). Необходимо вывести подчеркивание "_" между этими символами.
Конечно, задача была бы тривиальной без ограничений. А они следующие:

.NETС#: Этюды, часть 1

На канале c# в irc-сети Руснет пытаюсь развлекать людей т.н. этюдами. Это — короткие задачки, для решения которых требуется знать некоторые тонкости языка и реализации, и которые совсем не очевидны для человека, с упомянутыми тонкостями не знакомого.
Этюд номер 1 каналом уже разгадан, но хабросообщество его пока, скорее всего, не знает.

Персональные блоги Две интересные задачи

1. Мотоциклист и верховой



На аэродром к прибытию самолета был выслан мотоциклист из почтового отделения.
Самолет прибыл раньше установленого срка, и привезенная почта была направлена в почтовое отделение
с верховым. Проехав полчаса, верховой встретил мотоциклиста, который принял почту, и, не задерживаясь, повернул обратно.
В почтовое отделение мотоциклист прибыл на 20 минут раньше, чем следовало.
На сколько минут раньше установленого срока самолет прибыл на аэродром?

Персональные блоги Задачки для веб-сёрферов

Лет десять назад, когда интернет был диковинкой, я мошенничал тем, что участвовал в различных теле- и радиовикторинах, используя свой доступ в сеть. То есть не знал ответы на вопросы, а просто очень быстро умел находить их в интернете. Что позволило мне несколько раз выиграть билеты в кино, пару книжек и компакт-дисков, и разок появиться на местном телевидении. Все эти навыки пригодились в жизни — я и сейчас по просьбам друзей нахожу в Сети требуемое. «Если оно есть в интернете, говорю я им, то я это вам найду». Впрочем, не сочтите это за хвастовство. Уверен, что многие умеют быстро находить любую требуемую информацию.
И вот в связи с этим мне подумалось как-то: а почему бы не сделать хитроумных задачек в стиле, скажем, «Своей игры» или «Что? Где? Когда?», но специально для тех, кто любит и умеет искать в интернете.
И я начал сочинять такие задачки. Кому-то из моих знакомых они не понравились вовсе, кто-то почесал репу и остановился на середине пути. А кому-то понравилось, и они потратили несколько минут (или часов) своего драгоценного времени на разгадывание этих головоломок.
Если у вас есть свободное время, есть навыки поиска информации и вы хотите попробовать свои силы — попробуйте разгадать несколько таких задачек.
Всё, что для этого нужно — базовые знания, Google, Wikipedia и другие ваши любимые источники информации.
Задачки можно разгадывать сразу с хвоста, опустив начало. Я бы рекомендовал всё же разгадывать последовательно, от начала до конца. Тогда разгадывание может оказаться более интересным. Потому как здесь цель — не скорость и не точность лишь финального слова, а раскрытие всей цепочки целиком.