基本クラスライブラリ

**基本クラスライブラリ**（、通称**BCL**）は共通言語基盤 (CLI) における標準ライブラリである。共通言語仕様 (CLS) を満たす全てのCLI言語から利用可能となっている。

ボーランドとマイクロソフトが1999年6月8日に結んだ特許契約の成果物で、Visual Component Library (VCL) から派生したライブラリとなっている。また、一部のコンポーネントについてはバグまでもが完全移植されている。なお、これらのバグについては互換性維持のために修正されず現在も残されており、新たなコンポーネントの追加でその問題に対処している。

CLIは多数の共通機能をカプセル化するためにBCLを含んでおり、それはプログラマの仕事をより簡単にする。
ネットワークやセキュリティといった、C/C++を含む他のほとんどの言語の基礎ライブラリよりもずっと大きな領域をサポートしており、Javaクラスライブラリと比肩しうる。
CLIの最初の実装である.NET Frameworkは、BCLの起源である。BCLにおけるほとんどの機能はMonoや.NET Coreにも移植されている。BCLはときどきFramework Class Library (FCL) として間違って言及されることがあるが、これは、実際はマイクロソフト固有の名前空間を含むスーパーセットである。

BCLは.NET Frameworkのそれぞれのバージョンで更新・機能追加されている。

## 名前空間 (namespace)

いくつかの名前空間 (namespace) は、マイクロソフトによって公式にBCLの一部だとみなされているものもあれば、そうでないものもあるかもしれない。しかし、マイクロソフトによるCLIの実装である.NET Frameworkによって提供されるライブラリの一部としては、すべてが含まれている。

### 標準化された名前空間
ECMA 335 6th EditionおよびISO/IEC 23271:2012 standardsとして標準化された名前空間について記述する。

; System
: この名前空間はプログラミングの需要の核たるものを含んでいる。各種の基本数値型、文字列型 (`String`)、日時型 (`DateTime`)、論理値型 (`Boolean`) などのクラスと構造体、コンソール (`Console`)、数学関数と数学定数 (`Math`)、属性、例外および配列など、各種の基本クラスやインターフェイス、環境をサポートしている。

; System.Collections
: プログラミングで使用される多くの共通なコンテナあるいはコレクションクラスを定義している。リスト (`ArrayList`)、キュー (`Queue`)、スタック (`Stack`)、ハッシュ (`Hashtable`)、連想配列 (実装としては`Hashtable`, `DictionaryBase`, `SortedList`) などである。
: .NET Framework 2.0以降では、ジェネリックプログラミングのサポート (`Generic`) を含んでいる。

; System.Collections.Generic
: ジェネリックコレクションを定義するインターフェイスとクラスが含まれています。

; System.Diagnostics : アプリケーションに診断機能を提供する。イベントログ、パフォーマンスカウンタ、トレース、およびシステムプロセスに関する相互作用に関する機能である。

; System.Globalization : 国際化対応したアプリケーションを記述するための手助けとなる機能を提供する。文化 (culture) に結び付けられた情報、言語、国や地域、カレンダーの使用法、日付のフォーマット法、通貨、数字などが定義されるようになる。

; System.IO : 異なるストリーム (stream)、ファイルやほかのストリームを読み書きする機能を提供する。ファイルシステムに対するアクセスする機能も提供する。

; System.Net
: 現代的なネットワークで使用される多くのプロトコルのためのプログラミングインターフェイスを提供する。HTTP, FTP, SMTPなど。セキュアな通信としてTLSなどが提供される。

; System.Reflection
: 型、メソッド、フィールドに対するオブジェクトビューを提供する。これにより、コードの動的な生成や型を行使する能力が得られる。CLRのリフレクション機能にアクセスするAPIを公開する。

; System.Runtime
: アプリケーションやCLRの実行時の振る舞いを管理する機能を提供する。COMやネイティブコードと相互運用するいくつかの能力により、分散コンピューティングおよびバイナリ形式あるいはSOAP形式へのオブジェクトのシリアライズが実現される 。

; System.Security
: CLRセキュリティシステムの下層構造を提供する。この名前空間はアプリケーションにポリシーと権限に基づいたセキュリティを構築する機能を提供する。暗号化サービスなど。

; System.Text
: さまざまなエンコード、正規表現、より効果の高い文字列の操作メカニズム (`StringBuilder`) などをサポートする。

; System.Threading
: マルチスレッドプログラミングを容易にする。スレッドの活動とデータへのアクセスの同期を可能にし、またシステムにより供給されたスレッドプールを提供する。

; System.Xml
: XML処理のための標準ベースのサポートを提供する。読み書き、スキーマ、シリアライズ、検索、変換の機能を含む。

; System.Diagnostics.CodeAnalysis
: 分析ツールとの相互作用のためのクラスが含まれる。これらのツールは名前付けやセキュリティ規則といった慣例をコード化するための準拠用のコードを分析するために使用される。

; System.Diagnostics.Contracts : 事前条件や事後条件、そして普遍条件といったプログラム契約を表すための静的クラスを含む。

; System.Diagnostics.Eventing : アプリケーションのインストルメントに使用するためのクラスが含まれる。インストルメンテーションを可能にすると、Event Tracing for Windows (ETW) トレース サブシステムにイベントデータを記録する。

; System.Diagnostics.PerformanceData : この名前空間内でカウンター データを提供するためのクラスを使用する。カウンターはパフォーマンス モニターのようなコンシューマーにパフォーマンス モニターをさらすために使用される。パフォーマンスカウンターアーキテクチャの完全な解説は、パフォーマンスカウンターを参照すること。

; System.Diagnostics.SymbolStore : System.Diagnostics.SymbolStore 名前空間は、Microsoft intermediate language (MSIL) マップのソース行のような、デバッグ シンボル情報の読み書きを可能にするクラスを提供する。.NET Frameworkをターゲットとするコンパイラは、プログラム データベース (PDB) ファイルへのデバッグ シンボル情報を保存できる。デバッガとコードプロファイラーツールは実行時にデバッグ シンボル情報を読める。

### 標準化されていない名前空間
これらの名前空間はECMAあるいはISO standardとして標準化されておらず、マイクロソフトの実装特有のものである。しかしながら、これらの実装を強制しなくても、これらのうち完全あるいは一部は他のCLI実装に実装されている。

; System.CodeDom : このライブラリは実行時にコードを生成し実行する機能を提供する。

; System.ComponentModel : コンポーネントおよびコントロールに対する実行時およびデザイン時の振る舞いを実装する機能を提供する。「属性、型のコンバーター、データソースのバインディング、およびライセンスコンポーネントの実装のための」インフラを含んでいる。

; System.Configuration : 設定のハンドリングのインフラを提供する。

; System.Data
: この名前空間はADO.NETアーキテクチャを表現する。データアクセスおよびデータサービスのためにプログラマが使用できるコンピュータソフトウェアコンポーネントの集合である。

; System.Deployment : ClickOnceを使用してアプリケーションをアップグレードする方法をカスタマイズする機能を提供する。

; System.DirectoryServices : マネージドコードからActive Directoryへのアクセスを提供する。

; System.Drawing
: GDI+によるグラフィックス機能へのアクセスを提供する。2Dおよびベクターグラフィックス、画像処理、印刷、およびテキストサービスを含む。

; System.EnterpriseServices
: エンタープライズ向けアプリケーションのために、COM+サービスへのアクセスを.NETオブジェクトに提供する。これにより、.NETオブジェクトをより実践的なものとすることができる。

; System.Linq
: `IQueryable&lt;T&gt;`インターフェイスおよび関連するメソッドを定義する。これによりLINQが追加提供される。

; System.Linq.Expressions: デリゲートおよびラムダ式により構文木として記述された高レベルなコードが実行時に検査され、実行されることを許可する。

; System.Management : 情報を検索することができるようになる。「HDDの空き容量がどれだけあるかとか、現在のCPUの機能は何かとか、データベースにどのアプリケーションが接続しているか、など」

; System.Media : システム音声やWaveファイルの再生能力を提供する。

; System.Messaging : 「モニター、およびネットワークの管理者メッセージキューへの接続、送受信、メッセージの検索など」 .NET Remoting は提供される機能のもう一つの名称である。この名前空間はWindows Communication Foundationにより取って代わる予定である。

; System.Resources : アプリケーションを異なる文化や言語向けに国際化するため、多くの異なるリソースを管理する機能を提供する。

; System.ServiceProcess : アプリケーションをWindowsのサービスとして起動する機能を提供する。

; System.Timers : 「イベントを指定した間隔で発生させる機能を提供する」

; System.Transactions : ローカルもしくはネットワーク相手とのトランザクション処理を提供する。

; System.Web : さまざまなウェブに関連した機能を提供する。ブラウザ／サーバー間のコミュニケーションおよびXMLウェブサービスを作成することを可能にする。ほとんどもしくはすべてのこれらのライブラリはASP.NETで使用される。

; System.Windows.Forms : この名前空間はWindows Formsアーキテクチャを含み、ネイティブのWindowsインターフェイス(Windows API)をラッピングする。これによりWindows向けのGUIアプリケーションをマネージドコードで記述することが可能になる。 このシステムはWindows Presentation Foundationにより置き換えられる予定である。

## 関連項目
* ADO.NET
* ASP.NET
* Windows Forms
* Javaクラスライブラリ
* 標準ライブラリ

### .NET frameworkの将来的な機能
* Windows Presentation Foundation (WPF)
* Windows Communication Foundation (WCF)
* Windows Workflow Foundation (WF)
* Windows CardSpace

## 参照

## 外部リンク
* .NET Framework Developer Center Microsoft Developer Network (MSDN).
* Base Class Libraries Community More information and FAQs about the BCL.
* .NET Framework 3.5 namespaces
* MSDN BCL Documentation
* BCLTeam's WebLog
* https://docs.microsoft.com/ja-jp/dotnet/standard/class-library-