четверг, 20 декабря 2012 г.

Типизированное клонирование

Сегодня хочется рассказать о том, как описать в иерархии типов возможность (интерфейс) клонирования объектов. Подразумевается, что программист уже знает, каким именно образом будет реализован код клонирования (тут вариантов много и выбор конкретного зависит от очень большого числа требований и возможностей) и речь пойдёт о том, как бы с максимальным удобством для пользователя кода всё оформить.

вторник, 30 октября 2012 г.

Коллекция как тип свойства

Рано или поздно, но почти перед каждым программистом встаёт задача объявить свойство, тип которого будет представлять собой коллекцию каких-либо объектов. И тут важно не оплошать, что бы свойство было бы удобно использовать и при этом оно не позволило бы случайно "выстрелить себе в ногу".

К необходимости внести ясность в обсуждаемую тему сподвигло очень уж не редко встречающаяся на просторах интернета такая вот реализация свойства:

List<T> Items { get; set; }

или

T[] Items { get; set; }

вторник, 23 октября 2012 г.

NVI и C#

NVI - Non-Virtual Interface, одна из идиом программирования, предписывающая, что открытый интерфейс класса не должен быть виртуальным. Подробнее о ней вы можете прочитать в wikibooks и далее в References оттуда. Здесь я расскажу, почему в C# данный подход к проектированию типов имеет не меньшее значение, чем в С++ (почему-то не редко сталкивался с мнением, что это чисто С++-нутая заморочка), а так же о некоторых аспектах применения этого подхода, не описанных (явно) в популярной литературе.

среда, 19 сентября 2012 г.

MSVS 2012 крашится при run as administrator

Случилось у меня сабжевое несчастье. В EventLog проблема оставила такую информацию о себе:

Faulting application name: devenv.exe, version: 11.0.50727.1, time stamp: 0x5011ecaa
Faulting module name: ntdll.dll, version: 6.1.7601.17725, time stamp: 0x4ec49b8f
Exception code: 0xc0000374
Fault offset: 0x000ce6c3
Faulting process id: 0x5a60
Faulting application start time: 0x01cd9635b48b0467
Faulting application path: c:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\IDE\devenv.exe
Faulting module path: C:\Windows\SysWOW64\ntdll.dll
Report Id: f2381422-0228-11e2-9ec6-485b39c60a21

Упущу сложную процедуру поиска причины проблемы, скажу лишь, что всё исправилось с обновлением замечательного расширения VS Commands до последней на сегодня версии 11.2.1.0.

воскресенье, 1 июля 2012 г.

Как написать Equatable или Comparable тип (#2)

В прошлый раз была предложена реализация сравнения объектов на равенство, для унификации которого служат методы типа Object и интерфейс IEquatable<>. Теперь рассмотрим самый простой способ реализовать сравнение объектов на "больше-меньше". Ниже снова будет не только множество скучного кода и ещё более скучных пояснений, но и сниппеты для упрощения его, кода, использования.