Порождающие шаблоны: Инициализация при получении ресурса

Название шаблона

Инициализация при получении ресурса (Resource Acquisition Is Initialization или RAII).

Тип

Порождающий шаблон проектирования (Creational).

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

Использование ключевого слова 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#

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

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