.NET 4.0:基本クラス(BCL)の新機能 詳細レビュー



Visual Studio 2010および.NET Framework 4 Beta 2がダウンロードできるようになりました 。 .NET 4 Beta 2には、 .NET 4 Beta 1で以前に導入したものに加えて、基本クラス(BCL)に対する多くの新機能と拡張機能が含まれています 。 これらの改善の多くは、 Microsoft Connectの顧客レビューと推奨事項のおかげで行われました。



翻訳者から :この記事では、ベータ1からベータ2に行われた基本クラスの変更について説明します。記事の最後に、以前に.NET 4.0基本クラスに追加されたもののリンクと短いリストを示しました。


.NET 4 Beta 2の改善点の一般的なリスト

タイプコンプレックス



trans。:このタイプは、System.Numerics.dllアセンブリを自分で接続することで使用できます。 さらに、 この記事にはさらに詳細な情報があります



System.Numerics.Complex型は、実数と虚数の値を含む複素数です。 Complexは、デカルト座標(実数と虚数)と極座標(大きさと周期はラジアンで測定)の両方をサポートし、算術演算と三角演算をサポートします。 複素数は、高性能コンピューティング、グラフとチャートの構築、電子機器(いわゆるフーリエ変換)などの多くの分野で使用されています。



場所



System.Device.Location(System.Device.dllにあります)を使用すると、Windows 7で実行されている.NETアプリケーションは、アプリケーションが実行されているデバイスの現在の位置情報(つまり緯度と経度)を判断できます。 Windows 7は、GPSデバイスやWWAN無線(WWAN無線)など、さまざまな位置センサーをサポートしており、状況に応じて最も正確なデータを取得できるようにセンサーを自動的に切り替えることができます。 .NETアプリケーションは、これらのAPIを使用して、経度、緯度、高さ、水平および垂直の精度、方向、速度、都市の住所(国/地域、州/地域、都市、郵便番号、通り、家番号、階)。 .NET RCの次のリリースでロケーションAPI構造にいくつかの変更を加えることを計画しているため、アプリケーションでベータロケーションAPIを評価および使用する計画を立てる際には、このことに留意してください。 このブログの次の記事で、予定されている変更について詳しく説明します。



IObservable <T>



System.IObservable <T>およびSystem.IObserver <T>は、プッシュ通知の基本メカニズムを実装し、プッシュコレクション、 つまり監視可能なコレクションの作成に使用できます。 パターンに精通している人なら誰でも、これらのインターフェースでの有名なオブザーバーパターンの実装を認識するでしょう。 IObservable <T>は、エキサイティングな新しいエキサイティングなイベント駆動型および非同期.NET開発パラダイムへの扉を開きます。 この好例は、LINQ Standard Query OperatorsおよびIObservable <T>のその他の便利なストリーム変換関数を実装する拡張メソッドライブラリ(.NET 4には含まれていません)であるReactive Framework (RX)です。 一流のイベントF#[おおよそ。 transl。:ファーストクラスのイベントの詳細と.netイベントとの違いについては、 このノートで読むことができます。 イベントのLINQクエリを作成できることを想像してください。IObservable<T>を使用すると、まさにそれが可能になります。 IObservable <T>の強さに関する知識を統合するために、Eric Eijer Meijer がRXのChannel 9ビデオシリーズを紹介 し、 Wes DyerとKim Hamiltonの間でBCLでIObservable <T>について議論することを検討することをお勧めします(キムハミルトン)。



IObservable <T>は.NETのイベントを置き換えていると思われるかもしれません。 ただし、答えは「いいえ」ですが、必要に応じてイベントの代わりに実際にIObservable <T>を使用できます。 イベントは、.NETでよく知られている通知メカニズムであり、.NET開発者によく知られています。 したがって、.NET APIの主要な通知メカニズムとしてイベントを引き続き使用することをお勧めします。 IObservable <T>で最もクールなことの1つは、既存のイベントをIObservable <T>に変換することが最も簡単なプロセスであることです。 RXにはこのための組み込みメソッドが用意されており、F#には言語レベルでの組み込みサポートが含まれています。 今後もRXのニュースをお楽しみに。



Stream.CopyTo



Streamタイプを使用して1つのストリームから読み取り、別のストリームに書き込む間に、次のステレオタイプコードをどのくらいの頻度で作成しましたか?



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、およびEnum.TryParse <T>



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 .






ご注意 perev。:Enum .TryParse <FileOptions>(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 <T>を受け入れます



配列を受け入れる既存のオーバーロードメソッドに加えて、IEnumerableを受け入れるString.ConcatおよびString.Joinの新しいオーバーロードバージョンを追加しました。 つまり、コレクションを配列に追加変換することなく、IEnumerable <T>を実装するコレクションをこれらのAPIに渡すことができます。 また、配列に基づいて既存のオーバーロードされたString.Joinメソッドにparamsサポートを追加しました。これにより、より短いコードを記述できるようになりました。



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またはnullの文字列のチェックに加えて、スペース(より正確には、Char.IsWhiteSpaceで定義された文字)のみが含まれているかどうかもチェックします。 このメソッドは、コードコントラクトを使用する場合に役立ちます。



Environment.SpecialFolderのエクストラ



Environment.SpecialFolder列挙にいくつかの新しい値を追加しました。 さらに、Environment.GetFolderPathメソッドの新しいオーバーロードバージョンを追加しました。これは、SpecialFolderOption列挙型を受け入れ、「Create」(ディレクトリが存在しない場合は作成する)や「DoNotVerify」(チェックせずにパスをすばやく返す)などの追加オプションを指定できますディレクトリがネットワーク上の共有リソースである場合に便利です)。



Environment.Is64BitProcessおよびEnvironment.Is64BitOperatingSystem



これらの新しい便利なAPIにより、現在のプロセスとオペレーティングシステムのビット数を簡単に判断できます。 Environment.Is64BitProcessは、IntPtr.Size == 8を呼び出すことと同等です。Environment.Is64BitOperatingSystemは、現在のオペレーティングシステムが64ビットかどうかを通知します。 Environment.Is64BitProcessはfalseを返し、Environment.Is64BitOperatingSystem-trueはWOW64の 64ビットシステムで実行されている32ビットプロセスでtrueを返すことに注意してください



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データベースの結果を表示するときに発生しました。 これは、SQLからの時間が.NETのTimeSpan型にマップされるためです。 例:

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からの出力はカルチャに依存しない形式なので、「。」 (ピリオド)は10進数型の区切り文字として、Doubleは現在のカルチャ設定に基づいて '、'(コンマ)を使用します。



.NET 4では、System.TimeSpanは、新しいオーバーロードされたToString、Parse、TryParseメソッド、および新しいParseExactおよびTryParseExactメソッドを介したカルチャベースの書式設定と解析をサポートするようになりました。 ToStringのデフォルトの動作は同じままであり、下位互換性のために結果を古い形式で表示します。 新しいオーバーロードメソッドを使用すると、カルチャに応じて形式を指定できます。 ToStringの新しいオーバーロードバージョンがカルチャ依存の形式を使用するように、「g」形式(一般形式)を渡すことができます。



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の以前のバージョンでは、Lengthプロパティの値をゼロに設定することにより、StringBuilderをクリアできました。 これは完全には明らかではないため、より明確なオプションとしてStringBuilder.Clearを追加しました。



IntPtrとUIntPtrおよび加算演算子と減算演算子



IntPtrまたはUIntPtrのオフセットを追加するとエラーが発生する可能性があり、正しく行われなかった場合、多くの場合64ビットマシンの洗練されたバグの原因でした。 .NET 4には、このタイプのエラーを防止するために、AddメソッドとSubtractメソッドを使用して、これらのタイプの追加および削減操作が含まれています。



ServiceProcessInstaller.DelayedAutoStart



自動的に開始する.NETベースのサービスは、新しいDelayedAutoStartプロパティをtrue(推奨)に設定できるようになりました。これにより、残りのサービスの読み込み中にサービスの開始を遅らせることができます。



System.dllに移植されたObservableCollection <T>と入力します



System.Collections.ObjectModel.ObservableCollection <T>、System.Collections.ObjectModel.ReadOnlyObservableCollection <T>、およびSystem.Collections.Specialized.INotifyCollectionChanged型をWindowsBase.dll(WPFアセンブリ)からSystem.dllに移動しました。 これにより、WPFアセンブリに依存せずにこれらのタイプを使用して、モデルとビューの分離を改善できます。



.NET 4 Beta 2のBCLで行った革新をお楽しみください。VisualStudio 2010と.NET 4 Beta 2をすぐダウンロードしてくださいこれらのことについてあなたがどう思うか教えてください



翻訳者から:



これは、ベータ1と比較した.NET 4.0ベータ2の革新に関する記事の翻訳です。ベータ1およびCTPのバージョン中に.NET 4に追加された新しいものに慣れるには、 この記事を参照してください 。 ここでは、イノベーションの一般的なリストのみを提供します。

プログイット




All Articles