基本クラスライブラリ(Base Class Library、BCL)は.NET開発プラットフォームのコードを形成している。あなたがどのプロファイルのどのフロントエンドの技術を選んだとしても、BCLクラスはあなたのアプリケーションの至る所で常に見つける事が出来る。.NET4.5のBCLの期待の機能は以下である。
System.IO
Stream、TextReader、TextWriterクラスはすべて、より高コストな操作向けの新しい非同期メソッドを持つようになった。ここでの高コストとは「一つの操作で多数の作業を行う可能性がある」事を指す。TextReader.Peekのようなメソッドは非同期版を持つ予定は無い。このようにする理由は、率直に言えば、非同期操作は低コストではないという事である。Taskオブジェクトを割り当てる必要があり、言い換えると、キャッシュ無効化が必要であり、一般的には強いループ(tight loops)で用いるのは適していない。Immo Landwerth氏が続ける。
一般的にはこういう事が出来ます。非同期操作はできるだけchunkyに(分厚く)するのが良いです。例えば、BinaryReaderを用いてストリームから1000個のInt32を読み込みたい場合、1個のInt32だけを読み込む1000個のTaskを実行し、待つより、1000個すべてを同期して読み込む一つのTaskを実行し、待つ方が良いです。
BinaryReaderに関していえば、ラップしているストリームを自動的に閉じないように指定する事が出来る。この機能はBinaryWriter、StreamReader、StreamWriterでも利用する事が出来る。
System.IO.Compression名前空間を実装するために.NET BCLは現在、オープンソースのライブラリであるzlibを利用しているとImmo氏は述べている。これは新しいZipArchiveクラス同様DeflateStreamのパフォーマンスに関する改善も含む。これはMicrosoftによってzlibがライセンスされた最初のケースではない。WindowsのZIPファイルサポートとWPFでも用いられている。
System.Collection
.NET 4.5における読み取り専用コレクションに関しては(過去の記事で)すでに述べている。その頃から特に変わった点は無い。注目すべき機能としてはHashSetとISetに合わせるためのIReadOnlySetである。
抽象クラスであるCompare<T>は関数プログラミングにいくつかの良い点をもたらした。このクラスを明示的に実装する代わりに、Comparer<T>.Createを呼び出し、比較関数を指定すれば、その他を引き受けてもらう事が出来る。
あまり知られていないArraySegment<T>構造体が大規模な化粧直しを受け、初めてIEnumerableやIList<T>のような便利なインターフェースを実装した。しかし、まだそれは裸の配列(naked arrays)でしか動作しない。ほとんどの開発者はList<T>のような高レベルのコレクションクラスで用いるのが好きである。
その他
AssemblyMetadataAttributeが現在、アセンブリに任意のkey-valueペアをアサインする標準である。カスタム属性を定義する代わりにこれを使うメリットは少しはっきりしないが、これを利用する事ももちろん可能である。
Consoleにより入力、出力及びエラーのストリームがリダイレクトされた事を知ることが可能になる。カーソルの位置を設定したり、スクリーンカラーを変更したりするような機能を不可にするためにこれを使う事が多い。追加の文字が不要であれば、エンコーディングをEncoding.Unicodeに変更する事も出来る。
WeakReference<T>はWeakReferenceに対するタイプセーフな代替手段を提供する。長時間発生し続ける競合状態を無くすために、WeakReferenceは別々のIsAliveとTryGetTargetメソッドをもはや提供しなくなった。その代り、それらはTryGetTargetに統合された。
不運にも丁度良いWeakDelegateのようなものにはお目に掛かれていない。もし、そのようなものが存在していれば、弱いイベント(weak event)をもっと簡単に実装する事が出来るであろう。
RegexがTimeoutプロパティをサポートした。この重要なツールにより、任意の正規表現をインジェクトするようなDOS攻撃を避ける事が出来るようになる。