(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
  • Улучшения в классах сжатия

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


 Распечатать »
 Правила публикации »
  Обсудить материал в конференции Microsoft »
Обсудить материал в конференции Дизайн, графика, обработка изображений »
Написать редактору 
 Рекомендовать » Дата публикации: 03.11.2009 
 

Магазин программного обеспечения   WWW.ITSHOP.RU
Microsoft SQL CAL 2017 Sngl OLP 1License NoLevel UsrCAL
Microsoft Windows Remote Desktop Services CAL 2016 Sngl OLP 1License NoLevel User CAL
Microsoft Windows Server Datacenter Core 2016 Sngl OLP 2Licenses NoLevel CoreLic Qualified
Microsoft Exchange Server Enterprise 2016 Sngl OLP 1License NoLevel
Microsoft Windows Server CAL 2016 Sngl OLP 1License NoLevel Device CAL
 
Другие предложения...
 
Курсы обучения   WWW.ITSHOP.RU
 
Другие предложения...
 
Магазин сертификационных экзаменов   WWW.ITSHOP.RU
 
Другие предложения...
 
3D Принтеры | 3D Печать   WWW.ITSHOP.RU
 
Другие предложения...
 
Новости по теме
 
Рассылки Subscribe.ru
Информационные технологии: CASE, RAD, ERP, OLAP
Безопасность компьютерных сетей и защита информации
Новости ITShop.ru - ПО, книги, документация, курсы обучения
Программирование на Microsoft Access
CASE-технологии
Программирование в AutoCAD
Компьютерная библиотека: книги, статьи, полезные ссылки
 
Статьи по теме
 
Новинки каталога Download
 
Исходники
 
Документация
 
Обсуждения в форумах
Corel. Сохранение файла в старом формате. (25)
у меня есть горящий вопрос по Корелу и никто мне не может дать на него ответ. Я работаю в...
 
Erwin 3.5.2 (6)
Где скачать или кто может поделиться прогой Erwin 3.5.2? И как открыть файл из 3.5.2 в Erwin...
 
Демоверсия ERwin Data Modeler r9.7 (2)
Загрузил демо-версию, не запускается, требует лицензию
 
Надстройка "Поиск решения" MS Excel (4)
Помогите решить задачу с помощью " поиск решения" мука яйца ...
 
Access, Ключевое поле, Счетчик (9)
Подскажите пожалуйста, как изменить в Access в ключевом поле (счетчик последовательно),...
 
 
 



    
rambler's top100 Rambler's Top100