Советы по .NET Framework

Недавно я обнаружил англоязычный блог .NET Tip of The Day, в котором публикуются довольно полезные советы для программистов на .NET Framework.

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

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

Permalink | Комментарии (2) | Post RSSRSS comment feed

Отладка приложений с использованием исходного кода .NET Framework Library

В прошлом году Microsoft обещала, что с выходом Visual Studio 2008 будет открыт доступ к исходному коду .NET Framework Library с возможностью отладки приложений. Теперь, это стало, действительно, возможно. Подробные инструкции, как все настроить, читайте на блоге Shawn Burke.

Качать сразу все исходники не придется - студия сама подгрузит и закеширует нужную сборку (но необходимо постоянное соединение с Интернет).

Конечно, можно было и раньше смотреть исходный код фреймворка при помощи замечательной утилиты .NET Reflector, но возможность отладки непосредственно из Visual Studio упростит выявление некоторых трудноуловимых багов и позволит лучше понять архитекруру .NET Framework.

Permalink | Комментарии (0) | Post RSSRSS comment feed

Open Source ASP.NET движок для блога

Блог переехал на новый движок - BlogEngine.NET. Этот Open Source движок для блогов на платформе ASP.NET распространяется по лицензии Microsoft Permissive License, согласно которой можно делать с кодом все, что угодно, кроме изменения лицензии :-). BlogEngine.NET понравился мне простотой и скоростью работы. Но, несмотря на простоту он обладает всеми современными функциями для блогов. Конечно, до функциональности Community Server ему еще далеко, но для простого блога эта функциональность и не нужна, а тормознутость и сложность Community Server меня уже достала.

Вместе с движком я обновил и дизайн. Некоторые фичи еще в процессе доработки (например, пока нет кнопок для добавления в сервисы закладок).

 

P.S. Маул организовал конкурс наподобии давыдовских экспериментов. Поскольку считаю блог Маула одним из лучших SEO блогов, то с удовольствием участвую.

Permalink | Комментарии (9) | Post RSSRSS comment feed

Visual Studio 2008 и .NET Framework 3.5 Beta 2

27-го июля Microsoft выпустила вторую бета версию Visual Studio 2008 и .NET Framework 3.5. По поводу окончательного релиза Doug Seven, Senior Product Manager for Visual Studio Team System пишет в своем блоге:

While the launch events are scheduled to kick off on February 27, 2008, Visual Studio 2008 will be released before the end of the year."

Т.е., имеется вероятность того, что в конце года мы сможем перейти на новую студию и фреймворк 3.5. Но уже сейчас можно использовать .NET Framework 3.5 в коммерческих приложениях, т.к. он распространяется под, так называемой, go-live лицензией.

Итак, какие же новые возможности появятся у разработчиков при переходе на новую версию?

Поддержка нескольких версий .NET Framework (Multi-Targeting Support)

VS 2008 позволяет выбирать версию .NET Framework для проекта. Это значит, что вы можете использовать VS 2008 для своих проектов на .NET Framework 2.0 (например). Учитывая новые возможности, о которых рассказывается дальше, это очень полезное свойство новой студии, т.к. позволяет безболезненно перейти на новую IDE.

Новый Web Designer с поддержкой CSS

В VS 2008 существенно улучшен HTML Web Designer:

  1. Появился режим редактирования Split View, в котором одновременно отображаются и html код и дизайн страницы (аналогично тому, как это сделано в Macromedia Dreamweaver).
  2. Новое "Manage Styles" tool window, которое отображает все CSS стили с соответствующими правилами для редактируемой страницы.
  3. При выделении HTML элемента или серверного ASP.NET контрола новое CSS property window отображает все CSS свойства выделенного элемента и позволяет их редактировать.
  4. Поддержка Intellisense для CSS стилей.
  5. Вложенные Master Pages.

Поддержка ASP.NET AJAX и JavaScript

.NET 3.5 включает в себя ASP.NET AJAX. VS 2008, также, поддерживает JavaScript и AJAX в ваших приложениях.

LINQ и улучшения языка

Самые интересные, на мой взгляд, "фичи". LINQ (language integrated query, интегрированный язык запросов, произносится как "линк") вносит новую идеологию в работу с данными. С его помощью, используя SQL подобные запросы, можно получать данные из различных источников: .NET коллекций (и вообще, из любых объектов, имплиментирующих интерфейс IEnumerable<T>), XML, БД.

Особый интерес представляют части LINQ, называемые LINQ to SQL и LINQ to Entitis. С их помощью можно наполнять данными объекты домена (domain objects), представляющие собой модель предметной области. По сути, эти компоненты выполняют те же задачи, что и широко распространенная библиотека NHibernate, но при этом более тесно интегрированы с другими частями фреймворка. При этом, LINQ to SQL позволяет создвать простые зависимости между БД и объектной моделью, а LINQ to Entitis более сложные. К сожалению, релиз LINQ to Entitis ожидается в 2008 году, после выхода .NET Framework 3.5.

Вместе с LINQ в язык добавлены новые конструкции:

  • автоматические свойства (Automatic Properties)
  • инициализация объектов (Object Initializer)
  • лямбда выражения (Lambda Expressions)
  • синтаксис запросов (Query Syntax)
  • расширяющие методы (Extension Methods)
  • анонимные типы (Anonymous Types)

Другие улучшения

Кроме выше описанных, имеется много других улучшений: WPF designer (для VS 2005 можно установить бесплатный Add-on), WCF и Workflow проекты и дизайнеры, значительные усовершенствования в разработке приложений под Office и много другого.

Permalink | Комментарии (0) | Post RSSRSS comment feed

Вопросы на собеседовании на позицию .NET Developer

Недавно попал на близкий мне по тематике блог: Stump's Workshop. Автор приводит собственный список вопросов, которые вызывают наибольшее затруднение у собеседуемых. На девятом месте находится вопрос «В чем различие между классом и структурой?», про который я писал почти год назад в своем блоге (Самый задаваемый на собеседованиях вопрос по программированию на .NET).

Лично я вопросы такого типа, как 1-5 не люблю. Это теория, которую понимаешь и знаешь чуть ли не на субатомном уровне, но объяснить затрудняешься. Например, во время одного собеседования мне задавали такие вопросы: "что такое наследование, полиморфизм, массив и т.п.". Я прекрасно понимаю эти вещи, но объяснять их было очень сложно. После этого я решил, что в следующий раз, сразу откажусь отвечать на "дурацкие" вопросы. Правда, после того собеседования, пока еще не было повода.

Permalink | Комментарии (3) | Post RSSRSS comment feed

DataGridView - свойства NullValue и DataSourceNullValue

Как известно, в составе Visual Studio 2005 появился новый элемент управления - DataGridView, который, в отличие от просто DataGrid, обладает неплохой функциональностью и позволяет во многих случаях обойтись без сторонних компонентов, при этом не дописывая кучу кода.

Вот и мы используем его в своих проектах. В одном из них ввод и редактирование данных осуществляется непостредственно в самом DataGridView. Одна из возникших сложностей заключалась в особенностях работы со значениями null и DBNull.Value. Как раз для этого предназначены свойства NullValue и DataSourceNullValue.

Свойство NullValue позволяет задать значение, которое будет отображаться в ячейке, свойство Value которой содержит null или DBNull.Value. По умолчанию, для текстовых ячеек это свойство равно String.Empty. Свойство NullValue работает и в обратную сторону - при парсинге введенного в ячейку значения. Таким образом, при удалении содержимого ячейки, в источник данных запишется не пустая строка, а значение DBNull.Value. Если соответствующее поле источника данных не позволяет вносить значение NULL, произойдет ошибка.

Чтобы этого избежать, можно использовать другое свойство - DataSourceNullValue. Это свойство позволяет задать значение, которое будет отправлено источнику данных при помещении пользователем в ячейку null-значения. Т.е. в нашем случае свойству DataSourceNullValue надо присвоить значение String.Empty. Тогда, при очистке ячейки, в источник данных будет записываться пустая строка.

Подробное описание контрола DataGridView на русском:

DataGridView. Новый контрол в составе Framework 2.0
DataGridView. Новый контрол в составе Framework 2.0. Часть 2.

Permalink | Комментарии (3) | Post RSSRSS comment feed

.NET Framework 3.0 - начинаем разбираться

Вы, конечно, уже знаете, что 6 ноября 2006 года Microsoft выпустила релиз .NET Framework 3.0. Если вы уже установили себе новые компоненты и успели посмотреть, что из себя представляет этот релиз, то дальше можете не читать, т.к. этот пост предназначен тем, у кого (как и у меня до последнего времени) еще не дошли руки, чтобы это сделать.

Вообще-то я люблю ставить новые версии и делаю это как можно быстрее, чтобы в процессе повседневной работы изучать новые технологии. Но третья версия фрэймворка имеет свои особенности. Она не заменяет вторую версию (как вторая заменяет первую, предоставляя новые и усовершенствованные классы), а дополняет ее, ничего при этом не меняя в ней. Поэтому, как это ни странно, .NET Framework 2.0 - это неотъемлемая часть .NET Framework 3.0. Вот поэтому, просто установив новую версию, вы ничего не почувствуете. Старые классы не изменятся, а новые вы еще не используете.

Давайте рассмотрим, из чего же состоит .NET Framework 3.0.

Windows Workflow Foundation (WF)

Часто приходится реализовывать какой-либо бизнес-процесс. Windows Workflow Foundation позволяет выделить логику какого-либо процесса, состоящего из определенных шагов, в отдельные классы и выполнять с помощью workflow engine. При этом появляется возможность повторно использовать существующие шаги в других процессах. На данный момент в качестве workflow engine Microsoft предоставляет Microsoft Office 2007 и Windows SharePoint Services. Но со временем появятся и другие workflow engine от других производителей. Кстати, ничто не мешает вам самим сделать свой workflow engine.

При помощи WF и Share Point Server можно, например, довольно просто, используя уже готовые компоненты (т.е. практически не написав ни строчки кода) построить систему документооборота.

Преимущества такого подхода очевидны: логика workflow выделяется из всего кода приложения и может быть легко модифицирована.

Windows Communication Foundation (WCF)

Эта технология (ранее называвшаяся Indigo) предоставляет общий подход и API для взаимодействия с другими приложениями. Вместо использования множества существующих технологий взаимодействия, существующих в .NET Framework 2.0 (ASP.NET Web Services, .NET Remoting, Enterprise Services, System.Messaging, Web Services Enhancements), теперь можно обойтись только WCF.

Windows CardSpace (WCS)

Это очередная попытка Microsoft (все помнят про .NET passport?) избавить нас от необходимости помнить (или скорее где-то хранить) множество логинов и паролей (которые могут быть украдены) для доступа к различным интернет-сервисам. Вместо логинов с паролями предлагается идентификация с помощью карт (cards), которая выполняется провайдерами идентификации (identity providers) с использованием криптостойких механизмов. А если нет паролей, то и украсть их невозможно.

Windows Presentation Foundation (WPF)

Эта технология позволяет, с одной стороны, создавать приложения с богатым пользовательским интерфейсом, затрачивая для этого минимальные усилия, а, с другой стороны, отделить дизайн пользовательского интерфейса от кода, который управляет им. Последнее позволит непрограммистам (дизайнерам, бизнес-аналитикам, заказчикам) создавать интерфейс, в который программисты вдохнут жизнь, ничего не меняя внешне. Это обеспечивается использованием eXtensible Application Markup Language (XAML), базирующимся на XML.

Что дальше?

На этом краткое введение в .NET Framework 3.0 закончено. Пока моих знаний и опыта недостаточно, чтобы написать более подробный рассказ о новых возможностях. Надеюсь, что через не очень длительное время я смогу это сделать.

Но, если я хоть немного вас заинтересовал и вы не хотите ждать - вперед! Скачайте и установите компоненты и расширения для студии. SDK можно скачать в виде образа, размером около 1ГБ или, если у вас ограниченный трафик, использовать выборочную web-установку. В последнем случае, с минимальным выбором, придется закачать 20-30 МБ, что совсем не много.

Полезные ссылки:

Introducing the .NET Framework 3.0 (в конце статьи есть еще ссылки)

Events in Windows Presentation Foundation

И напоследок, ссылка на технологию WPF/E, которая позволяет создавать флэш-подобные сайты без использования флэш. Там есть примеры, котрые можно легко посмотреть, установив себе небольшой, всего 1 Мб, runtime WPF/E для Windows или для Mac.

Permalink | Комментарии (0) | Post RSSRSS comment feed

CLR via C#. Программирование на платформе Microsoft .NET Framework 2.0 на языке C# - держу в руках

CLR via C#. Программирование на платформе Microsoft .NET Framework 2.0 на языке C#

Как я уже писал ранее, вышла на русском языке книга Джефри Рихтера "CLR via C#. Программирование на платформе Microsoft .NET Framework 2.0 на языке C#". Теперь, когда я держу в руках свой экземпляр, хочу сделать небольшой обзор этой книги.

По сути, CLR via C# является переизданием книги "Программирование на платформе Microsoft .NET Framework". Большая часть глав перекочевала из предыдущей книги, но с учетом версии 2.0 фрэймворка.

Есть и совершенно новые главы, посвященные возможностям .NET Framework 2.0, которых небыло в первой версии:

Глава 16 Обобщения (generics)

Глава 18 Значимые типы, допускающие присвоение null (nullable types)

Еще две совершенно новые главы посвящены возможностям, существовавшим в .NET Framework 1.0, но не описанным в первой книге:

Глава 23 Асинхронные операции

Глава 24 Синхронизация потоков

Мое резюме: тем кто не читал первую книгу - читать вторую обязательно. Если вы уже прочли "Программирование на платформе Microsoft .NET Framework", то тратить деньги на это издание из-за нескольких глав смысла нет - проще прочитать о новых возможностях отдельно.

Тем, кто решил купить, советую потропиться - тираж небольшой, всего 3000 экземпляров.

Купить книгу с доставкой на дом можно в интернет-магазинах:

Permalink | Комментарии (3) | Post RSSRSS comment feed

CLR via C#. Программирование на платформе Microsoft .NET Framework 2.0 на языке C#

CLR via C#. Программирование на платформе Microsoft .NET Framework 2.0 на языке C#, Джефри Рижтер (Jeffrey Richter)

Купить книгу в интернет-магазине ozone.ru (открыть в новом окне)

Купить книгу в интернет-магазине bolero.ru (открыть в новом окне)

Наконец-то новая книга Джефри Рихтера "CLR via C#. Программирование на платформе Microsoft .NET Framework 2.0 на языке C#" вышла на русском языке и по нормальной цене! Я уже собирался заказать ее на амазоне себе в подарок на Новый Год, но рад, что не успел, т.к. там она стоит гораздо дороже.

К сожалению, у книги очень маленький тираж - 3000 экземпляров. Думаю, через пару месяцев (если не раньше) вы ее уже нигде не найдете.

Краткое содержание (полное содержание смотрите на сайте издательства):

Часть I

Основы CLR

Глава 1  Модель выполнения кода в среде CLR

Глава 2  Компоновка, упаковка, развертывание
и администрирование приложений и типов

Глава 3  Совместно используемые сборки
и сборки со строгим именем

Часть II

Работаем с типами

Глава 4  Основы типов

Глава 5  Элементарные, ссылочные и значимые типы

Часть III

Проектирование типов

Глава 6  Основные сведения о членах и типах

Глава 7  Константы и поля

Глава 8  Методы: конструкторы, операторы,
преобразования и параметры

Глава 9  Свойства

Глава 10  События

Часть IV

Важнейшие типы

Глава 11  Символы, строки и обработка текста

Глава 12  Перечислимые типы и битовые флаги

Глава 13  Массивы

Глава 14  Интерфейсы

Глава 15  Делегаты

Глава 16  Обобщения

Глава 17  Нестандартные атрибуты

Часть V

Средства CLR

Глава 19  Исключения

Глава 20  Автоматическое управление памятью (сбор мусора)

Глава 21  Хостинг CLR и домены приложения (AppDomains)

Глава 22  Загрузка сборок и отражение

Глава 23  Асинхронные операции

Глава 24  Синхронизация потоков

Как видно из содержания, часть материала перекрывается с книгой того же Джеффри Рихтера "Программирование на платформе Microsoft .NET Framework", но здесь уже речь идет о второй версии фреймоворка (да, я знаю, что уже вышла третья, но она только дополняет вторую и первую версии). К тому же, есть и совершенно новые главы (эх, как бы мне помогли главы о многопоточности на собеседовании в CQG).

Жду с нетерпением, когда книга окажется у меня в руках. Тогда напишу подробную рецензию.

Permalink | Комментарии (1) | Post RSSRSS comment feed

Работа со строками в .NET

 

Хотя работа со строками довольно хорошо описана в книге Дж. Рихтера, я решил затронуть эту тему, т.к. не у всех есть возможность прочитать эту книгу, а неправильное использование строк является частой ошибкой и ведет к снижению производительности приложения. К тому же, в книге имеется одна небольшая неточность по работе класса StringBuilder.

В .NET все строки являются экземплярами класса System.String (алиас string в C#). Он неявно наследуется от System.Object и реализует интерфейсы IComparable, ICloneable, IConvertible, IEnumerable:

 

[Serializable]
public sealed class String : IComparable, ICloneable, IConvertible, IEnumerable

C# рассматривает String как примитивный тип, поэтому для инициализации строковой переменной литералом следует использовать такой синтаксис:

 

String s = "This is a string.";

Компилятор размещает строковые литералы в метаданных модуля, а доступ к ним в run-time происходит с использованием так называемого механизма интернирования строк (string interning). Об интернировании я расскажу немного позже.
Так работать не будет:

String s = new String("This is a string.");

Т.к. String не имеет конструктора, принимающего String. Конструкторы String позволяют создать экземпляр из символа (char) или массива символов (char[]). При вызове из C++ with Managed Extensions или небезопасного кода C# (использующего указатели) применяются конструкторы, принимающие char* или sbyte*.
C# использует синтаксис С++ для задания специальных символов типа перевода строки или табуляции:

String s = "Line\r\nNew Line";

При выводе, например, с помощью Console.Write(s), "New Line" будет выведено на новой строке.
"\r\n" соответствует константе vbCrLf в Visual Basic 6.0. Но существует более правильный способ перевода строки. Класс System.Environment содержит read-only свойство NewLine, возвращающее соответствующую строку, в зависимости от платформы.

String s = "Line" + Environment.NewLine + "New Line";

Например, на платформе UNIX Environment.NewLine вернет \n.

String s = "Column1\tColumn2";

Column1 и Column2 будут разделены табуляцией.
Символ обратной косой черты ("\") является служебным и при использовании внутри строки его необходимо удваивать:

String path = "c:\\Program Files\\Microsoft Visual Studio 2003\\";

Однако, при помощи символа @ (коммерческое эт) можно определить так называемые "дословные строки" (verbatim strings). В этом случае компилятор воспринимает обратную косую черту как обычный символ. Этот код эквивалентен предыдущему:

String path = @"c:\Program Files\Microsoft Visual Studio 2003\";

Важнейшим свойством строк в .NET является их неизменяемость (immutable). Это означает что созданную строку невозможно изменить. Следствием этого является то, что любой метод класса String не изменяет его. Например:

string s = "Some String"; Console.WriteLine(s.ToUpper());

В этом примере создается строковый объект s, у которого вызывается метод ToUpper(). Это приводит к созданию нового строкового объекта ("SOME STRING"), который выводится на консоль. При этом s не изменилось.  Часто, для достижения результата, приходится вызывать последовательно несколько методов класса String:

string newString = s.Trim().Substring(10, 20).ToLower();

Этот код создает 3 новых строки, две из которых сразу становятся мусором. Не стоит особо беспокоиться об этом, т.к. такие кратковременно живущие объекты легко уничтожаются сборщиком мусора.
Однако, если вам необходимо часто формировать строки в своем приложении, то множество промежуточных строковых объектов все же может сказаться на производительности.
Для этого в .NET Framework имеется специальный класс StringBuilder. Он позволяет модифицировать содержащуюся в нем строку без потери производительности (не создавая промежуточных объектов).
Для этого используются следующме методы класса: Append, AppendFormat, Insert, Remove, Replace.
Как же работает класс StringBuilder? Джеффри Рихтер в своей книге "Программирование на платформе .NET FRAMEWORK" пишет:
У объекта StringBuilder предусмотрено поле с ссылкой на массив структур Char. Используя члены StringBuilder, вы можете эффективно манипулировать этим массивом, сокращая строку и изменяя символы строки. При увеличении строки, представляющей ранее выделенный массив символов, StringBuilder автоматически выделит память для нового, большего по размеру массива, скопирует символы и приступит к работе с новым массивом. Прежний массив станет мусором.
Возможно, что в бета версии .NET, по которой Рихтер писал свою книгу, так и было. Но давайте заглянем сами в класс StringBuilder (с помощью утилиты .NET Reflector). Класс содержит следующее объявление:

internal string m_StringValue;

Как вы помните, модификатор доступа internal (внутренний) эквивалентен public для классов той же сборки и private для классов других сборок.
Далее, методы, модифицирующие строку, вызывают внутренние небезопасные (internal unsafe) методы класса String, которые манипулируют строкой напрямую:

internal unsafe void ReplaceCharInPlace(char oldChar, char newChar, int startIndex, int count, int currentLength)
{
int num1 = startIndex + count;
fixed (char* local1 = &this.m_firstChar)
{
    for (int num2 = startIndex; num2 < num1; num2++)
    {
     if (local1[num2] == oldChar)
     {
        local1[num2] = newChar;
     }
    }
}
}

Благодаря модификатору доступа internal эти методы могут вызывать только классы сборки mscorlib, что исключает проблемы, присущие неуправляемым приложениям.
В заключение, хотелось бы рассказать немного об очень полезном методе Format класса String. Он, также, как и метод AppendFormat класса StringBuilder позволяет эффективно сформировать строку из строки со спецификаторами формата и строковых представлениях объектов. На самом деле, в методе Format создается объект StringBuilder и вызывается его метод AppendFormat. Это позволяет вам сэкономить несколько строк кода.
Вот одна из наиболее часто используемых перегрузок метода Format:

public static string Format( string format, params object[] args );

Вот как правильнее написать пример с переводом строки:

String s = String.Format("Line{0}New Line", Environment.NewLine);

Вот еще один пример:

int x = 10; int y = 20; String s = String.Format("{0} + {1} = {2}", x, y, x + y);

Если вы не знакомы со спецификаторами формата, обязательно прочтите о них в MSDN. Это очень удобное и эффективное средство для форматирования строк.
На этом краткий обзор строк в .NET пока завершен. Я многого не рассказал, но для первого знакомства этого вполне достаточно.

Permalink | Комментарии (2) | Post RSSRSS comment feed
Реклама
TNX.net - уникальный международный сервис для вебмастеров и оптимизаторов

Подписка
toodoo Читать в Яндекс.Ленте Добавить в Google Reader или Homepage

Статистика
]]>
  • PR0CY.com - сервис проверки доменов
  • BlogMemes.ru
]]>





]]>

]]>