пятница, 20 мая 2011 г.

Events vs. Rx

Есть замечательная библиотека «Reactive Extensions» (Rx) от Microsoft, которая предоставляет примитивы для реактивного программирования (в этой библиотеке вообще много всякого вкусного, но об этом как-нибудь в другой раз). В частности Rx позволяет представить .NET события в виде специальных коллекций — observable-коллекций. Такие коллекции представляют последовательность событий в виде потока данных. Самое замечательное, что с этими observable-коллекциями можно работать с помощью LINQ, так же как и с обычными коллекциями.

В этом посте я хочу сравнить два решения одной и той же задачи. Одна реализация строится на классических событиях; вторая — на observable-коллекциях из библиотеки Rx.

понедельник, 25 апреля 2011 г.

call vs. callvirt (часть 2)

Особенности инструкций call и callvirt, рассмотренные в предыдущей части, как правило, неинтересны разработчику на C#. Это детали реализации, про которые знать необязательно. Однако, в соответствии с законом Дырявых Абстракций, эти детали иногда всё-таки вылезают наружу.

call vs. callvirt (часть 1)

В процессе написания заметки про sealed-классы заинтересовался вопросом: «Влияет ли модификатор sealed на генерируемый компилятором IL-код вызова функций?». Любопытство завело меня довольно далеко; в этом посте — результаты моих изысканий на тему использования компилятором C# инструкций call и callvirt в генерируемом IL-коде.

четверг, 21 апреля 2011 г.

Плохой код

Многие пишут в своих блогах про плохой код. Особенно интересно, когда этот код взят из реальных проектов — живые проблемы всегда интереснее. Я тоже решил в стороне не оставаться.

вторник, 12 апреля 2011 г.

Про sealed-классы

В C# есть ключевое слово «sealed». Применяется оно в форме модификатора к классам, методам, свойствам и событиям, но сегодня речь пойдёт только про классы.

Что все знают про sealed-классы

Применительно к классу, модификатор sealed означает, что от класса нельзя наследоваться. Это правило проверяется на этапе компиляции — если попытаться отнаследоваться от sealed-класса код просто не будет компилироваться. По умолчанию модификатора sealed у класса нет, т.е. любой класс изначально может быть использован в качестве базового (разумеется, за исключением static-классов).