|
|
|||||||||||||||||||||||||||||
|
.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
прим. перев.: этот тип можно использовать подключив самостоятельно сборку System.Numerics.dll. Тип System.Numerics.Complex представляет собой комплексное число, включающее в себя значения вещественного числа и мнимого числа. Complex поддерживает как декартовы координаты (вещественные и мнимые), так и полярные координаты (величина и период измеряются в радианах) и поддерживает арифметические и тригонометрические операции. Комплексные числа используются в ряде областей, включая высокопроизводительные вычисления, построениях графиков и диаграм, электронике (т.н. преобразования Фурье) и в других областях.
LocationSystem.Device.Location (который расположен в System.Device.dll) позволяет .NET-приложениям запущенным на Windows 7 определять текущую геолокацию (т.е. широту и долготу) устройства на котором приложение запущено. Windows 7 поддерживает ряд разнообразных датчиков местоположения, включая устройства GPS и радио WWAN (WWAN radios), и может автоматически переключаться между датчиками, когда они доступны, для получения наиболее точных данных в конкретной ситуации. .NET-приложения смогут использовать эти API для получения доступа к следующим данным: долгота, широта, высота, горизонтальная и вертикальная точность, направление, скорость и городской адрес (т.е. страну/регион, штат/область, город, почтовый индекс, улицу, номер дома, этаж). Учтите, что мы планируем внести некоторые изменения в структуру location-API в следующем выпуске .NET RC, так что имейте это в виду, когда соберетесь оценивать и использовать location-API beta 2 в своих приложениях. Мы расскажем побольше о запланированных изменениях в следующих статьях в этом блоге.
IObservableSystem.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 для чтения из одного потока и записи в другой?
В .NET 4 вам больше не придется писать такой код. Мы добавили для Stream новый метод CopyTo, который позволит написать так:
Guid.TryParse, Version.TryParse, and Enum.TryParseМы добавили метод TryParse в System.Guid, System.Version, и System.Enum. Enum.TryParse - это генерик (обобщение), приятное улучшение по сравнению с необобщенным методом Parse, которое позволяет писать более чистый код. В предыдущих версиях .NET, чтобы распарсить значение перечисления, мы могли писать что-то вроде этого:
В .NET 4 вы можете использовать обощенный метод TryParse:
Прим. перев.: здесь могло бы быть Enum.TryParse(value, out fo), но C# великолепный язык, компилятор которого сам все понимает
Enum.HasFlagМы добавили новые удобные для использования методы в System.Enum, которые позволяет супер-просто определить установлен ли флаг в перечислении Flags без нужды вспоминать битовые операторы. Это так же помогает делать код более читаемым. В VB:
В C#:
Перегруженные String.Concat и String.Join принимают IEnumerableМы добавили новые перегруженные версии String.Concat и String.Join, которые принимают IEnumerable в дополнение к существующим перегруженным методам, которые принимают массивы. Это означает, что вы можете передавать любую коллекцию, которая реализует IEnumerable в эти API без лишней конвертации коллекции в массив. Мы так же добавили поддержку params в существующий перегруженный метод String.Join основанный на массиве, который теперь позволяет вам писать более короткий код.
String.IsNullOrWhiteSpaceЭтот новый удобный метод похож на существующий метод IsNullOrEmpty, но в дополнение к проверке строки на null или пустое значение, он так же проверяет строку на то, содержит ли она одни только пробелы (точнее, символ определенный в Char.IsWhiteSpace). Этот метод может быть полезен при работе с контрактами кода.
Дополнения в Environment.SpecialFolderМы добавили несколько новых значений в перечисление Environment.SpecialFolder:
Кроме того, мы добавили новый перегруженный вариант метода 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 вроде этих:
С .NET 4.0 вы можете написать это проще:
Глобализация при парсинге и форматировании TimeSpanВ предыдущих версиях .NET тип TimeSpan поддерживался только для единственного культуро-независимого формата при форматировании и парсинге. Это означало, что когда вы вызывали ToString на французской машине вывод не совпадал с культурными настройками, что делало приложение неглобализованным. Чаще всего эта проблема возникала при отображении результатов из баз данных SQL, которые были представлены в широкоиспользуемом типе колонки Time. Это происходит потому, что Time из SQL отображается в тип TimeSpan в .NET. Например:
Выходные данные:
Выходные данные от TimeSpan.ToString находятся в культуро-независимым формате, так что на выходе исопльзуется `.` (точка) как разделитель для десятичных типов, тогда как Double использует `,` (запятая) основываясь на текущих настройках культуры. В .NET 4 System.TimeSpan теперь поддерживает форматирование и парсинг основанный на установках культуры через новые перегруженные методы ToString, Parse и TryParse, а так же новые методы ParseExact и TryParseExact. Поведение ToString по умолчанию останется предыдущим и для обратной совместимости будет выводить результаты в старом виде. Новые пергруженные методы позволят вам указывать формат в зависимости от культуры. Вы можете передать "g"-формат (general format) для того, чтобы новый перегруженный вариант ToString использовал культуро-чувствительный формат:
Выходные данные:
С этим новым форматом, выходные данные результатов 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. Здесь я приведу только общий список нововведений:
Ссылки по теме
|
|