Использование ключевого слова yield

Не часто приходится использовать ключевое слово yield. Обычно про него вспоминают при создании класса, реализующего интерфейс IEnumerable. Давайте разберемся, зачем оно нужно и как работает. А так же выясним, всегда ли надо разрабатывать класс для указанного выше интерфейса.

Читать дальше...

Разделители компонентов даты и времени

Можете ли вы сказать, что выведет на консоль следующий код?

DateTime dt = new DateTime(2010, 10, 15);
Console.WriteLine(dt.ToString("yyyy/MM/dd"));

Если вы ответили "2010/10/15", то вы ошиблись. Знаете почему?

Читать дальше...

Подвох от protected при наследовании в C#

Перед выходными мне попался перевод на русский язык заметки "Hide and seek". В ней рассматривалось правило сокрытия методов при наследовании класса. В примере был приведен код, где обращение к методу базового класса можно было принять за попытку обращения к закрытому методу вне его класса. Но меня заинтересовал другой момент.

Читать дальше...

IDisposable.Dispose() – определяем исключение в using

Вчера в комментариях заметки "Отложенные действия в C#" был задан вопрос про исключения. В нем подразумевалась необходимость определять в методе Dispose() нормально ли завершился код блока using. При этом сам метод вызывается до передачи управления блоку catch. Так есть ли решение?

Читать дальше...

Отложенные действия в C#

Часто изменение объекта ведет к необходимости вызова метода для обработки новых или отредактированных данных. Например, после добавления записи необходимо вызывать метод сортировки. В этом случае, при добавлении серии получится множество ненужных вызовов. Логичным решением будет отложить сортировку до окончания изменений. Как лучше это сделать? Рассмотрим один из вариантов решения данной проблемы.

Читать дальше...