четверг, 1 марта 2012 г.

HttpListener своими руками

Постановка задачи.
Пару недель назад появилась необходимость в прослушивателе протокола HTTP так называемом HttpListener'е. Нужен он был как вспомогательная утилита для юнит тестов. Суть тестов заключалась в том, что при определенных условиях отправлялся запрос на определенный адрес и порт. Затем этот запрос обрабатывался и в зависимости от результатов обработки, приходил ответ с определенным HTTP статус кодом. Результат юнит теста зависел от ответа полученного от прослушивателя.
В данной статье я хотел бы продемонстрировать пошаговую реализацию такого прослушивателя.

вторник, 28 февраля 2012 г.

Сериализация в .NET - это просто

Магические слова “сериализация” и “десериализация” имеют отношение к магии сохранения состояния объекта. Наверняка сейчас мало у кого может возникнуть вопрос “зачем нужна сериализация”, но дабы соответствовать духу статьи, сказать об этом необходимо.
Сериализация имеет прямое отношение к сохранению состояния объекта в файле или памяти, а десериализация - к восстановлению состояния объекта соответственно. Примеров, когда это может пригодиться, неимоверное множество. Начиная от сохранения пользовательских настроек, сохранения промежуточного состояния объекта и заканчивая передачей объекта в специальном формате веб-сервису.
Для осуществления магии (де)сериализации .NET предлагает нам 3 родных варианта (не считая самостоятельной реализации механизма сериализации):
- Сериализация в двоичный формат (BinnaryFormatter)
- Сериализация в формат SOAP (SoapFormatter)
- Сериализация в формат xml (XmlSerializer)

У каждого из вариантов есть свои плюсы и минусы, о которых я постараюсь рассказать далее.

пятница, 27 января 2012 г.

Что такое dynamic, и с чем его едят.

Сегодня я хотел бы затронуть тему динамических типов в C# и ключевого слова dynamic.
Как известно, в .NET 3.0, C# обзавелся ключевым словом var, которое позволяет объявить локальную, неявно типизированную переменную.
var s = "String"; //"s" имеет тип string
Также переменную можно объявить как object. Ни для кого не секрет, что System.Object возглавляет иерархию классов .NET Framework и переменная объявленная как object, может представлять все что угодно. Таким образом мы получим следующее:
object o = new Employee() {Name = "Employee1"};
//"o" может быть приведена к типу Employee Console.WriteLine("Employee’s name is: {0}", ((Employee)o).Name);

четверг, 14 июля 2011 г.

Генерация числа и строки заданной длины.

Общие сведения о System.Random
Класс Random, определенный в библиотеке классов .NET предлагает возможность генерировать числа.
У класса Random есть 3 public метода, позволяющих сгенерировать число тем или иным способом: Next, NextBytes и NextDouble. Next возвращает случайное число, NextBytes возвращает массив байтов заполненный случайнми числами, NextDouble возвращает случайное число в диапазоне от 0.0 до 1.0.
Метод Next существует в 3 перегруженных формах, которые позволяют задать минимальный и максимальный диапазон для генерации случайного числа.
Но класс Random не предоставляет функциональности для генерации строки символов определенной длины. Но у нас есть все средства под рукой для написания подобных методов.

понедельник, 27 июня 2011 г.

Лямбда-выражения или не стоит искать сложностей там, где их нет.

Несколько слов вместо введения.
В данной статье я хочу рассказать о лямбда-выражениях - что это такое и с чем их едят. Частенько на форумах можно встретить вопросы вроде "зачем они нужны?", "нечитабельны" и т.д. Думаю многих отталкивает синтаксис лямбда-выражений, который может показаться простым и сложным одновременно. Главное усвоить, что лямбда-выражения предназначены для определения анонимных методов в сжатой манере, тем самым еще больше упрощая работу с делегатами.
Т.к. эта статья не нацелена на обзор того, что из себя представляют делегаты и анонимные методы, то предлагаю быстро пробежаться от делегатов через анонимные методы до лямбда-выражений на простом примере.

суббота, 4 июня 2011 г.

Когда следует использовать ключевое слово 'var' в C#?


Небольшое введение.
Контекстное ключевое слово 'var' было впервые представленное в C# 3.0. Оно описано, как "контекстное" т.к. является ключевым в определенном контексте. В остальных случаях - это обычный идентификатор.

Контекстные ключевые слова не являются чем-то новым. Еще в C# 1.0 были представлены такие контекстные ключевые слова, как get, set, value, add и remove - которые используются в контексте определения свойств и событий. Другие контекстные ключевые слова были добавлены в последующих версиях.

'var' является инструкцией для компилятора C#, позволяющей определить тип локальной переменной из типа присваиваемого ей значения. Например:
var list = new List(); // list принадлежит типу List
var count = 3; // count принадлежит типу int
var greeting = "Hello"; // greeting принадлежит типу string
var var = 'c'; // var (в роли имени переменной) принадлежит типу 'char'