(495) 925-0049, ITShop интернет-магазин 229-0436, Учебный Центр 925-0049
  Главная страница Карта сайта Контакты
Поиск
Вход
Регистрация
Рассылки сайта
 
 
 
 
 

.NET 4.0: что нового в базовых классах (BCL)? Подробный обзор (исходники)

Источник: habrahabr
XaocCPS

Visual Studio 2010 и .NET Framework 4 Beta 2 уже доступны для загрузки. .NET 4 Beta 2 содержит некоторое количество нового функционала и улучшений в базовых классах (BCL) в дополнение к тем, которые мы представили ранее в .NET 4 Beta 1. Многие эти улучшения были произведены благодаря отзывам и рекомендациям от клиентов, полученным через Microsoft Connect.

От переводчика: эта статья содержит описание изменений в базовых класса, которые были произведены от версии Beta 1 до Beta 2. В конце статьи я привел ссылку и краткий список того, что было добавлено в базовые классы .NET 4.0 ранее.

Общий список улучшений в .NET 4 Beta 2

  • Тип Complex;
  • Location;
  • IObservable;
  • Stream.CopyTo;
  • Guid.TryParse, Version.TryParse, and Enum.TryParse;
  • Enum.HasFlag;
  • перегруженные String.Concat и String.Join принимают IEnumerable;
  • String.IsNullOrWhiteSpace;
  • дополнения в Environment.SpecialFolder;
  • Environment.Is64BitProcess и Environment.Is64BitOperatingSystem;
  • поддержка параметров Path.Combine;
  • глобализация при форматировании и разборе TimeSpan;
  • Stopwatch.Restart;
  • StringBuilder.Clear;
  • дополнения в IntPtr и UIntPtr и операторы Subtraction;
  • ServiceProcessInstaller.DelayedAutoStart;
  • тип ObservableCollection перенесен в System.dll.

Тип Complex

прим. перев.: этот тип можно использовать подключив самостоятельно сборку System.Numerics.dll.

Тип System.Numerics.Complex представляет собой комплексное число, включающее в себя значения вещественного числа и мнимого числа.  Complex поддерживает как декартовы координаты (вещественные и мнимые), так и полярные координаты (величина и период измеряются в радианах) и поддерживает арифметические и тригонометрические операции. Комплексные числа используются в ряде областей, включая высокопроизводительные вычисления, построениях графиков и диаграм, электронике (т.н. преобразования Фурье) и в других областях.

Location

System.Device.Location (который расположен в System.Device.dll) позволяет .NET-приложениям запущенным на Windows 7 определять текущую геолокацию (т.е. широту и долготу) устройства на котором приложение запущено. Windows 7 поддерживает ряд разнообразных датчиков местоположения, включая устройства GPS и радио WWAN (WWAN radios), и может автоматически переключаться между датчиками, когда они доступны, для получения наиболее точных данных в конкретной ситуации. .NET-приложения смогут использовать эти API для получения доступа к следующим данным: долгота, широта, высота, горизонтальная и вертикальная точность, направление, скорость и городской адрес (т.е. страну/регион, штат/область, город, почтовый индекс, улицу, номер дома, этаж). Учтите, что мы планируем внести некоторые изменения в структуру location-API в следующем выпуске .NET RC, так что имейте это в виду, когда соберетесь оценивать и использовать location-API beta 2 в своих приложениях. Мы расскажем побольше о запланированных изменениях в следующих статьях в этом блоге.

IObservable

System.IObservable и System.IObserver реализуют основной механизм для push-уведомлений и могут исопльзоваться для создания push-коллекций или по-другому - наблюдаемых ( observable ) коллекций. Любой, кто знаком с паттернами, узнает в этих интерфейсах реализацию широкоизвестного паттерна наблюдатель (observer). IObservable приоткрывает дверь для новых замечательных парадигм разработки на .NET основанных на событиях и асинхронном программировании. Отличный пример этому - Reactive Framework (RX), библиотека методов расширения (не входит в .NET 4), которая реализует операторы LINQ Standard Query Operators и другие полезные потокоизменяющие (stream transformation) функции  для IObservable. События первого класса (first-class) F#так же поддерживают IObservable и, кроме того, F# содержит библиотеку операторов для обозревателей  похожую на RX. Представьте себе возможность создавать LINQ-запросы к событиям, это как раз то, что IObservable позволяет делать. Для закрепления знаний о силе IObservable я рекомендую посмотреть серию видео Эрика Мейджера "Знакомство с RX" (Erik Meijer introducing RX) на Channel 9 и обсуждение discussing IObservable in the BCL между Везом Дайером (Wes Dyer) и Ким Гамильтон (Kim Hamilton).

Вы могли подумать, что IObservable приходит на замену событиям в .NET. Однако, ответ: "нет", но вы и в самом деле можете использовать IObservable вместо событий, если захотите. События - это хорошо известный механизм уведомлений в .NET и он отлично знаком .NET-разработчикам. Поэтому, мы рекомендуем продолжать использовтаь события как основной механизм уведомлений для .NET API. Одна из самых классных вещей в IObservable - это то, что конвертация существующего события в IObservable - простейший процесс. RX предосталяет для этого встроенные методы, а F# содержит встроенную поддержку на уровне языка. Оставайтесь с нашим блогом для большего количества новостей о RX в будущем.

Stream.CopyTo

Как часто вы писали следующий стеретипный код во время работы с типом Stream для чтения из одного потока и записи в другой?

Stream source = ...;
Stream destination = ...;
byte[] buffer = new byte[4096];
int read;
while ((read = source.Read(buffer, 0, buffer.Length)) != 0)
{
  destination.Write(buffer, 0, read);
}

* This source code was highlighted with Source Code Highlighter.

В .NET 4 вам больше не придется писать такой код. Мы добавили для Stream новый метод CopyTo, который позволит написать так:

Stream source = ...;
Stream destination = ...;
source.CopyTo(destination);

* This source code was highlighted with Source Code Highlighter.

Guid.TryParse, Version.TryParse, and Enum.TryParse

Мы добавили метод TryParse в System.Guid, System.Version, и System.Enum. Enum.TryParse - это генерик (обобщение), приятное улучшение по сравнению с необобщенным методом Parse, которое позволяет писать более чистый код.

В предыдущих версиях .NET, чтобы распарсить значение перечисления, мы могли писать что-то вроде этого:

try {
  string value = Console.ReadLine();
  FileOptions fo = (FileOptions)Enum.Parse(typeof(FileOptions), value);
  // Success
}
catch {
  // Error
}

* This source code was highlighted with Source Code Highlighter.

В .NET 4 вы можете использовать обощенный метод TryParse:

string value = Console.ReadLine();
FileOptions fo;
if (Enum.TryParse(value, out fo))
{
  // Success
}

* This source code was highlighted with Source Code Highlighter.

Прим. перев.: здесь могло бы быть Enum.TryParse(value, out fo), но C# великолепный язык, компилятор которого сам все понимает

Enum.HasFlag

Мы добавили новые удобные для использования методы в System.Enum, которые позволяет супер-просто определить установлен ли флаг в перечислении Flags без нужды вспоминать битовые операторы. Это так же помогает делать код более читаемым.

В VB:

Dim cm As ConsoleModifiers = ConsoleModifiers.Alt Or ConsoleModifiers.Shift
Dim hasAlt1 As Boolean = (cm And ConsoleModifiers.Alt) = ConsoleModifiers.Alt ` using bitwise operators
Dim hasAlt2 As Boolean = cm.HasFlag(ConsoleModifiers.Alt) ` using HasFlag

* This source code was highlighted with Source Code Highlighter.

В C#:

ConsoleModifiers cm = ConsoleModifiers.Alt / ConsoleModifiers.Shift;
bool hasAlt1 = (cm & ConsoleModifiers.Alt) == ConsoleModifiers.Alt; // using bitwise operators
bool hasAlt2 = cm.HasFlag(ConsoleModifiers.Alt); // using HasFlag

* This source code was highlighted with Source Code Highlighter.

Перегруженные String.Concat и String.Join принимают IEnumerable

Мы добавили новые перегруженные версии String.Concat и String.Join, которые принимают IEnumerable в дополнение к существующим перегруженным методам, которые принимают массивы. Это означает, что вы можете передавать любую коллекцию, которая реализует IEnumerable в эти API без лишней конвертации коллекции в массив. Мы так же добавили поддержку params в существующий перегруженный метод  String.Join основанный на массиве, который теперь позволяет вам писать более короткий код.

String.Join(", ", new string[] { "A", "B", "C", "D" }); // you used to have to write this
String.Join(", ", "A", "B", "C", "D"); // now you can write this

* This source code was highlighted with Source Code Highlighter.

String.IsNullOrWhiteSpace

Этот новый удобный метод похож на существующий метод IsNullOrEmpty, но в дополнение к проверке строки на null или пустое значение, он так же проверяет строку на то, содержит ли она одни только пробелы (точнее, символ определенный в Char.IsWhiteSpace). Этот метод может быть полезен при работе с контрактами кода.

Дополнения в Environment.SpecialFolder

Мы добавили несколько новых значений в перечисление Environment.SpecialFolder:

  • AdminTools
  • CDBurning
  • CommonAdminTools
  • CommonDesktopDirectory
  • CommonDocuments
  • CommonMusic
  • CommonOemLinks
  • CommonPictures
  • CommonProgramFilesX86
  • CommonPrograms
  • CommonStartMenu
  • CommonStartup
  • CommonTemplates
  • CommonVideos
  • Fonts
  • LocalizedResources
  • MyVideos
  • NetworkShortcuts
  • PrinterShortcuts
  • ProgramFilesX86
  • Resources
  • SystemX86
  • Templates
  • UserProfile
  • Windows

Кроме того, мы добавили новый перегруженный вариант метода Environment.GetFolderPath, который принимает перечисление SpecialFolderOption, позволяющее указать некоторые дополнительные опции, такие как "Create" (чтобы создать директорию, если она не существует) и "DoNotVerify" (для быстрого возврата пути без проверки на существование, что полезно когда директория является расшаренным в сети ресурсом).

Environment.Is64BitProcess и Environment.Is64BitOperatingSystem

Эти новые полезные API упрощают определение битности (bitness) текущего процесса и операционной системы. Environment.Is64BitProcess - это эквивалент вызову IntPtr.Size == 8. Environment.Is64BitOperatingSystem сообщит вам является текущая операционная системы 64-битной. Имейте в виду, что Environment.Is64BitProcess может вернуть false, а Environment.Is64BitOperatingSystem - true в 32-битном процессе запущенном на 64-битной системе под WOW64.

Поддержка параметров Path.Combine

Вы когда-нибудь делали вложенные вызовы Path.Combine вроде этих:

Path.Combine("dir1", Path.Combine("dir2", Path.Combine("dir3", "dir4")));

* This source code was highlighted with Source Code Highlighter.

С .NET 4.0 вы можете написать это проще:

Path.Combine("dir1", "dir2", "dir3", "dir4");

* This source code was highlighted with Source Code Highlighter.

Глобализация при парсинге и форматировании TimeSpan

В предыдущих версиях .NET тип TimeSpan поддерживался только для единственного культуро-независимого формата при форматировании и парсинге. Это означало, что когда вы вызывали ToString на французской машине вывод не совпадал с культурными настройками, что делало приложение неглобализованным. Чаще всего эта проблема возникала при отображении результатов из баз данных SQL, которые были представлены в широкоиспользуемом типе колонки Time. Это происходит потому, что Time из SQL отображается в тип TimeSpan в .NET. Например:

Thread.CurrentThread.CurrentCulture = new CultureInfo("fr-FR");
Console.WriteLine(new TimeSpan(0, 1, 1, 1, 1));
Console.WriteLine(12.34);

* This source code was highlighted with Source Code Highlighter.

Выходные данные:

01:01:01.0010000
12,34

Выходные данные от TimeSpan.ToString находятся в культуро-независимым формате, так что на выходе исопльзуется `.` (точка) как разделитель для десятичных типов, тогда как Double использует `,` (запятая) основываясь на текущих настройках культуры.

В .NET 4 System.TimeSpan теперь поддерживает форматирование и парсинг основанный на установках культуры через новые перегруженные методы ToString, Parse и TryParse, а так же новые методы ParseExact и TryParseExact. Поведение ToString по умолчанию останется предыдущим и для обратной совместимости будет выводить результаты в старом виде. Новые пергруженные методы позволят вам указывать формат в зависимости от культуры. Вы можете передать "g"-формат (general format) для того, чтобы новый перегруженный вариант ToString использовал культуро-чувствительный формат:

Thread.CurrentThread.CurrentCulture = new CultureInfo("fr-FR");
Console.WriteLine(new TimeSpan(0, 1, 1, 1, 1).ToString("g"));
Console.WriteLine(12.34);

* This source code was highlighted with Source Code Highlighter.

Выходные данные:

01:01:01,0010000
12,34

С этим новым форматом, выходные данные результатов TimeSpan совпадают с пользовательскими культурными настройками.

Stopwatch.Restart

Это новый полезный метод - эквивалент вызова Stopwatch.Reset с последующим Stopwatch.Start.

StringBuilder.Clear

В предыдущих версиях .NET вы могли очистить StringBuilder установив значение свойства Length в ноль. Это не совсем очевидно, поэтому мы добавили StringBuilder.Clear как более очевидный вариант.

IntPtr и UIntPtr и операторы Addition и Subtraction

Добавление смещения для IntPtr или UIntPtr могло привести к ошибкам и, елси не было произведено корректно, часто было источником изощренных багов на 64-битных машинах. .NET 4 влючает операции дополнения и уменьшения для этих типов с методами Add и Subtract, для предотвращения такого типа ошибок.

ServiceProcessInstaller.DelayedAutoStart

Сервисы основанные на .NET, которые запускаются автоматически, теперь могут устанавливать новое свойство DelayedAutoStart в true (рекомендуется), которое позволяет задержать старт сервиса пока загружаются остальные сервисы плюс установить коротку паузу для улучшения производительности загрузки системы при запуске на Vista и выше.

Тип ObservableCollection перенесен в System.dll

Мы перенесли типы System.Collections.ObjectModel.ObservableCollection, System.Collections.ObjectModel.ReadOnlyObservableCollection и System.Collections.Specialized.INotifyCollectionChanged из WindowsBase.dll (WPF-сборка) в System.dll. Это позволит вам использовать эти типы без зависимости от сборок WPF и улучшит разделение между моделью и представлением.

От переводчика:

Это был перевод статьи о нововведениях в .NET 4.0 Beta 2 по сравнению с Beta 1.  Здесь я приведу только общий список нововведений:

  • Контракты кода (Code Contracts)
  • Параллельные расширения (Parallel Extensions)
  • BigInteger
  • Вариантные аннотации (Variance annotations)
  • Кортежи (Tuples)
  • SortedSet
  • Улучшения в File System Enumeration
  • Отображаемые в памяти файлы (MemoryMappedFiles)
  • Улучшения в функцицонале по работе с реестром
  • Данные глобализации обновлены согласно Unicode 5.1
  • Улучшения в ResourceManager
  • Улучшения в классах сжатия

Ссылки по теме


 Распечатать »
 Правила публикации »
  Написать редактору 
 Рекомендовать » Дата публикации: 03.11.2009 
 

Магазин программного обеспечения   WWW.ITSHOP.RU
Microsoft 365 Business Basic (corporate)
Microsoft Office 365 Персональный 32-bit/x64. 1 ПК/MAC + 1 Планшет + 1 Телефон. Все языки. Подписка на 1 год.
Microsoft Office 365 Профессиональный Плюс. Подписка на 1 рабочее место на 1 год
Microsoft 365 Apps for business (corporate)
Microsoft Office 365 для Дома 32-bit/x64. 5 ПК/Mac + 5 Планшетов + 5 Телефонов. Подписка на 1 год.
 
Другие предложения...
 
Курсы обучения   WWW.ITSHOP.RU
 
Другие предложения...
 
Магазин сертификационных экзаменов   WWW.ITSHOP.RU
 
Другие предложения...
 
3D Принтеры | 3D Печать   WWW.ITSHOP.RU
 
Другие предложения...
 
Новости по теме
 
Рассылки Subscribe.ru
Информационные технологии: CASE, RAD, ERP, OLAP
Безопасность компьютерных сетей и защита информации
Новости ITShop.ru - ПО, книги, документация, курсы обучения
CASE-технологии
Программирование на Microsoft Access
OS Linux для начинающих. Новости + статьи + обзоры + ссылки
eManual - электронные книги и техническая документация
 
Статьи по теме
 
Новинки каталога Download
 
Исходники
 
Документация
 
 



    
rambler's top100 Rambler's Top100