. NET 4.0: що нового в базових класах (BCL)? Докладний огляд (исходники), Різне, Програмування, статті

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 підтримує як декартові координати (речові і уявні), так і полярні координати (величина і період вимірюються в радіанах) і підтримує арифметичні та тригонометричні операції. Комплексні числа використовуються в ряді областей, включаючи високопродуктивні обчислення, побудови графіків і діаграм, електроніці (т.зв. перетворення Фур’є) та в інших областях.


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:


Крім того, ми додали новий перевантажений варіант методу 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. Тут я приведу лише загальний список нововведень:

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*