Pull to refresh
  • by relevance
  • by date
  • by rating

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

.NET *
На канале c# в irc-сети Руснет пытаюсь развлекать людей т.н. этюдами. Это — короткие задачки, для решения которых требуется знать некоторые тонкости языка и реализации, и которые совсем не очевидны для человека, с упомянутыми тонкостями не знакомого.
Этюд номер 1 каналом уже разгадан, но хабросообщество его пока, скорее всего, не знает.
Читать дальше →
Total votes 56: ↑36 and ↓20 +16
Views 1K
Comments 43

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

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

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

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

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

Читать дальше →
Total votes 25: ↑17 and ↓8 +9
Views 1.4K
Comments 43

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

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

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

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


Читать дальше →
Total votes 61: ↑34 and ↓27 +7
Views 1.3K
Comments 76

C#: Этюды, часть 4

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

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

Имеется простейший класс: class X { public int Val; }. При создании объекта этого класса какой реальный размер он будет занимать? И какие значения будут содержать дополнительные поля? Предъявите доказательство в виде кода на C# ;)
Читать дальше →
Total votes 18: ↑13 and ↓5 +8
Views 283
Comments 41

C#: Этюды, часть 5

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

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

У сегодняшней задачки, надеюсь, с этим все будет в порядке :)
Читать дальше →
Total votes 12: ↑8 and ↓4 +4
Views 188
Comments 17

C#: Этюды, часть 6

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

В этот раз задачка довольно простая, но новичкам в шарпе она может оказаться полезной. Есть следующий код:
Читать дальше →
Total votes 18: ↑13 and ↓5 +8
Views 205
Comments 30

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

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

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

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

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

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

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

UPD2: проблемы с воспроизведением видео на исходном сайте скорее правило, чем исключение, поэтому я залил файл на файлообменник: depositfiles.com/files/7ej8pu7zt
Total votes 63: ↑40 and ↓23 +17
Views 1.3K
Comments 14

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

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

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

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

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

Console.WriteLine("before static ctor");
// нужно вызвать здесь
Console.WriteLine("after static ctor");
Total votes 32: ↑22 and ↓10 +12
Views 1.7K
Comments 60