.NET Framework の概要とクラスライブラリ

編集注: この記事は、ソフトバンク パブリッシング株式会社発行の月刊 C Magazine 2002 年 7 月号に掲載された 「最新プログラミングインターフェイス 見せます .NET Framework の全部」 を元に一部加筆しております。

C Magazine の Web サイト : http://www.cmagazine.jp/

目次

Introduction
グラフィックス (GDI+)
メッセージキューと I/O
コレクションとリフレクション
Web アプリケーション
スレッド
Windows アプリケーション
データベース
XML
デバッグ用の機能
そのほかの機能
まとめ

Introduction

.NET Framework とは

Microsoft がインターネットをプラットフォームとする .NET 構想を打ち出し、その .NET の世界を実現させるための開発ツールとして Visual Studio .NET が発売されました。Visual Studio .NET は前バージョンである Visual Studio 6.0 を大幅に進化させた開発環境ですが、その中でもいちばん進化した点は .NET Framework を採用した点です。

歴史を紐解いてみますと、Windows のアプリケーションを作成するための手法として最も源流に位置する方法が Windows API を使用する方法です。PC 上のプログラミング経験が 10 年以上の方であれば経験されている方も多いと思われますが、DOS のファンクションコールを使用したアプリケーションの開発手法から Windows のイベントドリブン型への開発手法への転換は、プログラマに発想の転換と API の知識を要求しました。DOS 上のアプリケーションの開発経験が豊富な人でも、Windows 上のアプリケーションを作成するために書籍や SDK を片手に再び勉強したわけです。

そこで開発者の負担を軽減させるために、いくつかのクラスライブラリや開発ツールが出現しました。MFC や Borland の OWL は Windows API を使いやすくするために生まれたクラスライブラリです。Visual Basic は開発手法そのものを Windows API をまったく意識しない形式へと変化させました。Delphi は VCL というクラスライブラリを搭載し、Windows API の隠蔽と開発効率の向上を図っています。これらのクラスライブラリや開発ツールは、Windows API をいかに使いやすい形態で開発者に提供するかという視点で作成されています。

.NET Framework は Windows API を使いやすくするものではなく、Windows API に変わるプログラミング インターフェースとして提供されます。.NET Framework はクラスライブラリだけではなく、共通言語ランタイム (Common Language Runtime) という実行エンジンも含んでいます。共通言語ランタイムは、安全で堅牢なプログラムの実行をつかさどるだけでなく、その名前の通りさまざまな開発言語で使用できる実行エンジンです。共通言語ランタイムに対応した開発言語は、同一のクラスライブラリを使用できるだけでなく、言語を越えたクラスの継承や例外の処理を行うことができます。対応言語としては、Microsoft の Visual Basic、Visual C++ 以外にも .NET Framework のために新たに作成された開発言語である C# があります。さらに富士通は COBOL 言語を .NET 対応に対応させた NetCOBOL を発表し、Borland も Delphi の .NET 対応を表明しています。

.NET Framework の名前空間とクラスライブラリ

.NET Framework の名前空間とクラスの階層を理解するためには、Visual Studio .NET ファミリーのパッケージ製品に含まれている階層図ポスターを眺めることがいちばん効果的です。ポスターは全部で 5 種類があり (表 1) 、そのうち 4 枚の表面が .NET Framework のクラス階層図です。4 枚すべてを横に並べて壁に貼ると約 3 メートルになるという膨大なものです。MFC のクラス階層図と比較しても 3 倍近い量となっています。このように、.NET Framework が膨大な機能を提供していることがポスターからも読み取れます。ポスターには、名前空間ごとにそれぞれの名前空間に含まれるクラス、インターフェースの一覧を掲載されていますので、目的のクラスを含む名前空間を逆引きすることができます。

ここでは、階層図ポスターの順に .NET Framework の主な名前空間について説明します。

表面 裏面 大きさ (cm)
.NET Framework の名前空間とクラス Visual Studio .NET オートメーションオブジェクトモデル 98×73
ASP.NET の Web 関連クラス 分散アプリケーションの開発 80×73
.NET Framework の Windows フォームのクラス Visual Basic .NET 61×73
ADO.NET のデータと XML 関連クラス データアクセス 42×73
ATL、ATL Server、OLE DB テンプレート MFC 7.0 98×73

表 1. Visual Studio .NET のパッケージ製品に含まれるポスター

※ Visual Studio .NET 全パッケージ製品と Visual C++ .NET Standard にはすべてのポスターが含まれる。Visual Basic .NET Standard と Visual C# .NET Standard には、ATL/MFC のポスターを除く 4 種類のポスターが含まれる

System

System 名前空間には、様々なアプリケーションで使用される基本的なクラスが含まれています。Int32、Double、Boolean、Decimal、DateTime などのデータ型、イベントハンドラも含まれています。基本的なクラスの中には、配列の作成、操作、検索、並び替えを行う Array クラス、コンソールアプリケーションのための Console クラス、データ型を別の基本データ型に変換する Convert クラス、サイン、コサインなどの三角関数のメソッドや円周率などの定数を含む Math クラスなどの多彩なクラスが含まれます。

この System に含まれるクラスについてはサンプルコードともに後述します。

グラフィックス (GDI+) - 画像の描画、直線や曲線などで構成されたベクタ画像を扱う機能、文字描画、フォント作成、印刷、非矩形のウィンドウ作成

System.Drawing

System.Drawing 名前空間には、GDI+ の基本的な描画機能を使用するクラス類が含まれています。GDI+ はデバイスに依存しないアプリケーションを記述するためのグラフィックデバイスインターフェイスで、2 次元のベクタグラフィックス、イメージング、タイプグラフィなどの機能を提供しています。この System.Drawing では GDI+ の機能のうち基本的な描画機能しか提供していませんが、System.Drawing.Drawing2D、System.Drawing.Imaging、System.Drawing.Text の名前空間でより高度な機能を提供しています。ディスプレイデバイスへの描画のためのメソッドを数多く用意している Graphics クラス、文字描画のためのフォントを作成する Font クラスなどのクラスが含まれます。

System.Drawing.Drawing2D

System.Drawing 名前空間は基本的な描画のためのクラスを提供していましたが、System.Drawing.Drawing2D 名前空間は高度な 2 次元グラフィックスやベクタグラフィックスの機能が用意されています。仮想的な空間の中に直線、曲線や文字などを描画して表現するための GraphicsPath クラス、多色グラデーションの色のブレンドの補間に使用される色と位置の配列を定義する ColorBlend クラスなどが含まれます。

GraphicsPath を使用すると、非矩形のウィンドウを簡単に作成することができます。リスト 1 は GraphicsPath を使用して、C Magazine という文字の形のウィンドウを作成する例です。Visual Studio .NET または Visual C# .NET で C# の Windows フォームアプリケーションを新規に作成し、表示されたフォームをダブルクリックしてリスト 1 のコードを Form1_Load の中に記述します。図 1 は実行した画面です。赤い文字の部分が、今回作成した非矩形のウィンドウです。

using System.Drawing.Drawing2D; // コードの先頭に追加
 (中略) 
private void Form1_Load(object sender, System.EventArgs e)
{
    // Window を最大化し、背景色を赤に設定する
    this.WindowState = FormWindowState.Maximized;
    this.BackColor = Color.Red;

    // GraphicsPath と使用するフォント、座標を設定する
    GraphicsPath myGP = new GraphicsPath();
    FontFamily font = new FontFamily("Arial");
    PointF p = new PointF(90, 50);

    // GraphicsPath に文字列を書き込む
    myGP.AddString("C Magazine", font, 0, 128, p, StringFormat.GenericDefault);
    this.Region = new Region(myGP);
}

リスト 1. 非矩形ウィンドウの作成

図 1. C Magazine という形のウィンドウ

図 1. C Magazine という形のウィンドウ

System.Drawing.Printing

System.Drawing.Printing 名前空間には印刷関連のクラスが含まれています。PrintDocument クラスの新しいインスタンスを生成しプロパティを設定して、Print メソッドを呼び出すことで印刷を行います。この名前空間には用紙サイズを設定する PaperSize クラスや印刷ページに適用する設定を指定する PageSettings クラスなどの印刷を行う際の設定を行うクラスも含まれています。

メッセージキューと I/O - メッセージキューへの接続、監視、管理、データストリームやファイルからの読み書き

System.Messaging

System.Messaging 名前空間には、ネットワークのメッセージキューへの接続、監視、管理を行い、メッセージの送受信を行うクラスが含まれています。この名前空間のメインとなるクラスは MessageQueue クラスで、このクラスにはキューにメッセージの書き込みを行う Send メソッドや、キューからメッセージを読み取るための Receive メソッド、メッセージを読み取ったときにキューからメッセージを削除しない Peek メソッドなどが含まれます。キューから非同期にメッセージを読み取ることができる BeginReceive、EndReceive などのメソッドも提供しています。

System.IO

System.IO 名前空間には、データストリームやファイルから読み取り、書き込みを行うためのクラスが含まれています。バイナリデータの読み取り、書き込みを行うための BinaryReader クラスと BinaryWriter クラス、一連の文字の読み取り、書き込みを行うための TextReader クラスと TextWriter クラス、文字を特定のエンコーディングでストリームから読み取るための StreamReader クラスや書き込みを行うための StreamWriter クラスが含まれます。

リスト 2 は StreamReader を使用して読み込んだファイルに記述されている文字列を、先ほどの System.Collections.Specialized 名前空間に含まれる StringCollection クラスを使用して表示している例です。Visual Studio .NET または Visual C# .NET で C# の Windows フォームアプリケーションを新規に作成し、button を 1 つ貼り付けます。そして、button1 をダブルクリックしてリスト 2 のコードを記述します。また、c:\tmp\tmp.txt に UTF-8 で保存されているテキストファイルを用意します。

図 2 はサンプルプログラムの実行例です。tmp.txt の中に書かれている文字列を StreamReader を使用して読み出し、StringCollection に追加しています。button1 をクリックすると、StringCollection の文字列を順に MessageBox によって表示していきます。

// コードの先頭に記述する
using System.IO;
using System.Collections.Specialized;
 (中略) 
private void button1_Click(object sender, System.EventArgs e)
{
    string str;

    // StreamReaderを使用して任意のファイルを読み込む
    // 文字エンコーディングを指定していない場合は UTF-8 となる
    StreamReader sr = File.OpenText("c:\\tmp\\tmp.txt");

    // 文字列に特化した Collection である StringCollection を使用
    StringCollection sc = new StringCollection();

    // 1 行読み込み、StringCollection に追加する
    while ((str = sr.ReadLine()) != null)
    {
        sc.Add(str);
    }

    // StringCollection の文字列を順に表示する
    foreach (string s in sc)
    {
        MessageBox.Show(s,"要素数 = " + sc.Count);
    }
}

リスト 2. StreamReader と StringCollection の使用例

図 2. StreamReader と StringCollection のサンプルの実行例

図 2. StreamReader と StringCollection のサンプルの実行例

コレクションとリフレクション - キューやスタック、ハッシュテーブル、動的な型のインスタンスの作成

System.Collections

System.Collections 名前空間には、オブジェクトのさまざまなコレクションを定義するクラスが含まれています。オブジェクトの先入れ先出しコレクションのための Queue クラス、後入れ先出しコレクションのための Stack クラス、ビット値配列を管理する BitArray クラス、ハッシュテーブルのための Hashtable クラスなどが含まれます。

さらに特定の場合に使用されるコレクションを集めた、System.Collections.Specialized 名前空間もあります。この System.Collections.Specialized 名前空間には、文字列を扱うコレクションである StringCollection クラスや、リンクされたリストディクショナリを扱う ListDictionary クラスなどが含まれます。

System.Reflection

System.Reflection 名前空間には型の動的な作成や呼び出しを可能にする機能を備え、読み込まれた型、メソッド、フィールドのマネージビューを提供するクラスとインターフェースが含まれています。リフレクションを使用することにより、動的な型のインスタンスの作成、作成したインスタンスの既存のオブジェクトへのバインド、既存のオブジェクトから型を取得することなどが可能になります。アセンブリマニフェストにリストされているモジュールを読み込み、そのアセンブリから型を検索してインスタンスを作成するための Assembly クラス、モジュールを含んでいるアセンブリやモジュール内のクラスの情報を探索するための Module クラスなどが含まれます。

Web アプリケーション - ブラウザとサーバー間通信、データキャッシング、セキュリティ、XML Web サービス、WSDL、Web フォーム

System.Web

System.Web 名前空間には、ブラウザとサーバー間の通信を行うクラスが含まれています。Web 要求中にクライアントから送信された HTTP 値を読み取るための HttpRequest クラス、クライアントへの HTTP 出力を管理する HttpResponse クラス、およびサーバー側のユーティリティとプロセスへのアクセスを実現するヘルパメソッドを提供する HttpServerUtility クラス、HTTP Cookie をタイプセーフな方法で作成および操作するための HttpCookie クラスなどが含まれます。

System.Web.Caching

System.Web.Cashing 名前空間には、サーバーで頻繁に使用するデータをキャッシュするためのクラスが含まれています。ハッシュテーブルやデータセットなどの任意のデータオブジェクトを格納するディクショナリを含む Cache クラスには、オブジェクトの追加を行う Add メソッド、削除を行う Remove メソッド、キャッシュ内に格納されているアイテムの数を取得する Count プロパティなどが含まれます。

System.Web.Security

System.Web.Security には、Web サーバーアプリケーションに ASP.NET セキュリティを実装するためのクラスが含まれます。ASP.NET アプリケーションで Windows/IIS 認証を使用するための WindowAuthenticationModule クラス、指定したリソースへのアクセスの許可と拒否を指定する URL ベースの認証サービスを提供する UrlAuthorizarionModule クラス、リモートユーザーが要求したファイルにアクセスするための NT アクセス許可を所有しているかを確認するための FileAuthorizationModule クラス、フォーム認証を使用する FormAuthenticationModule クラスなどが含まれます。

System.Web.SessionState

System.Web.SessionState 名前空間には、Web サーバー上の Web アプリケーションにある、それぞれのクライアントに固有のデータストレージを有効にするためのクラスが含まれます。アプリケーションにセッション状態サービスを提供するための SessionStateModule クラス、セッション状態値、セッションレベルの設定を行うための HttpSessionState クラスが含まれます。

System.Web.Services

System.Web.Services 名前空間には、XML Web サービスを作成および使用できるようにするためのクラスが含まれています。XML Web サービスは、HTTP、XML、SOAP、WSDL などの標準プロトコルを使用して、疎結合環境でメッセージを交換する機能を提供するアプリケーションです。XML Web サービスを利用すると、ファイアウォール経由または異種システム間で XML を使用してデータを送受信することや、アプリケーションロジックのリモート呼び出しを行うことが可能になります。XML Web サービスを作成する機能と XML Web サービスにアクセスする機能を最初から含んでいることが .NET Framework のメリットのひとつとなっています。

リスト 3 は最も単純な XML Web サービスの例です。IIS 上に .NET Framework をインストールしている環境で、リスト 3 のコードをメモ帳などのエディタを使用して記述します。ファイル名は wstest.asmx とし、\inetpub\wwwroot に保存します。Internet Explorer で https://localhost/wstest.asmx と入力すると、図 3 が表示されます。このページには XML Web サービスに含まれる公開されている Web メソッドの一覧が掲載されていますので、ここでは Hello をクリックします。図 4 のテスト用のページが表示されますので、ここで Hello メソッドのテストを行うことができます。パラメータ値の S の部分に C Magazine と入力して起動ボタンをクリックします。図 5 は Hello メソッドを起動したときの戻り値です。このように、XML を使用した戻り値が戻ってきます。もちろんこの XML Web サービスは、任意の XML Web サービスクライアントアプリケーションから呼び出すことができます。

リスト 3 の 3 行めで System.Web.Services 名前空間を使用することを宣言し、7 行めの [WebMethod] 属性で Hello メソッドを Web メソッドとして定義しています。WebMethod 属性は System.Web.Services 名前空間に含まれる属性で、この 1 行を追加することにより任意のメソッドを Web メソッドとして公開することができるようになります。.NET Framework は XML Web サービスをネイティブにサポートしていますので、このように非常に少ないコードで XML Web サービスを作成することが可能になります。

<%@ Class="MyService" Language="C#" %>

using System.Web.Services;

public class MyService
{
    [WebMethod]
    public string Hello(string s)
    {
        return "Hello " + s;
    }
}

リスト3. wstest.asmx、単純な XML Web サービスの作成

図 3. Web メソッドの一覧

図 3. Web メソッドの一覧

図 4. Hello メソッドのテスト

図 4. Hello メソッドのテスト

図 5. Hello メソッドの実行結果

図 5. Hello メソッドの実行結果

System.Web.Services.Description

System.Web.Services.Description 名前空間には、WSDL によって XML Web サービスをパブリックに説明するためのクラスが含まれています。XML Web サービスによって渡されるデータの抽象定義を提供するための Message クラス、交換されるメッセージに関連するデータ型定義を記述するための Types クラスなどのクラスが含まれます。System.Web.Services.Description 名前空間に含まれる各クラスは WSDL 仕様の特定の要素に対応しています。

System.Web.Services.Discovery

System.Web.Services.Discovery 名前空間には、XML Web サービスクライアントが XML Web サービス探索と呼ばれるプロセスを使用して、Web サーバー上の XML Web サービスを検索可能にするためのクラスが含まれています。サービスの説明を行う ContractReference クラス、XML スキーマ定義への参照を表す SchemaReference クラス、探索ドキュメントへの参照を表す DiscoveryDocumentReference クラスなどが含まれます。

System.Web.Services.Protocols

System.Web.Services.Protocols 名前空間には、XML Web サービスクライアントと ASP.NET を使用して作成された XML Web サービスとの通信時のプロトコルを定義するクラスが含まれます。SOAP をサポートする SoapHttpClientProtocol クラス、HTTP-GET プロトコルをサポートする HttpGetClientProtocol クラス、HTTP-POST プロトコルをサポートする HttpPostClientProtocol クラスなどを含みます。

System.Web.UI

System.Web.UI 名前空間には、Web フォームページを作成するための、Web ユーザーインターフェイスの作成に使用する標準的なクラスが含まれます。この名前空間には、Web アプリケーションに含まれる .aspx ファイルに対して要求が出されるたびに自動的に生成される Page クラス、データ連結式構文の生成と解析のサポートを RAD デザイナに提供するための DataBinder クラス、特定のコントロールやページのビューステートを管理する StateBag クラス、HTML 固有のテキストを Web フォームページに書き込むための HtmlTextWriter クラスなどを含みます。

System.Web.UI.HtmlControls

System.Web.UI.HtmlControls 名前空間には、Web ユーザーインターフェイスを作成するときに Web フォームに追加できる、HTML 固有のコントロール用のクラスが含まれます。HTML サーバーコントロールはサーバー上で実行され、ほとんどのブラウザでサポートされている標準の HTML タグに直接変換されます。表 2 に、System.Web.UI.HtmlControls クラスに含まれるクラスと、各クラスが対応している HTML タグの一覧を示します。Visual Studio .NET の統合開発環境上では、これらのクラスの多くはツールボックスの HTML タブに登録されていますので、Web フォーム上または HTML エディタ上に直接ドラッグアンドドロップすることにより使用することができます。

クラス名 対応する HTML タグ
HtmlAnchor
HtmlButton
HtmlForm
HtmlImage
HtmlInputButton
HtmlInputCheckBox
HtmlInputControl など
HtmlInputFile
HtmlInputHidden
HtmlInputImage
HtmlInputRadioButton
HtmlInputText
HtmlSelect

表 2. System.Web.UI.HtmlControls と HTML タグの対応表

System.Web.UI.WebControls

System.Web.UI.WebControls 名前空間には、ASP.NET の Web サーバーコントロールを作成するためのクラスが含まれます。Web サーバーコントロールはサーバー上で実行されるため、コントロールの動作をプログラムによって制御できます。これらのコントロールを Web フォームに追加すると、ブラウザ固有の HTML やスクリプトをレンダリングできるため、デバイスに依存しない Web ユーザーインターフェイスを作成することが可能になります。

System.Web.UI.WebControls には Button クラス、TextBox クラス、Label クラスといった基本的なクラスだけではなく、月間カレンダーを表示するための Calendar クラス、入力された値の比較を行うことができる CompareValidator クラス、広告バナーを表示するための AdRotator クラスなどの拡張機能を提供するクラスも含まれています。Visual Studio .NET の開発環境では、ツールボックスの Web フォームタブにこれらのコントロールが登録されており、Web フォーム上にドラッグアンドドロップして使用することができます。図 6 はさまざまなコントロールを Web フォームに貼り付けている例です。

図 6. WebControls を貼り付けた Web アプリケーション

図 6. WebControls を貼り付けた Web アプリケーション

スレッド - 作成、管理、ミューテックスによる同期

System.Threading

System.Threading 名前空間にはマルチスレッドのためのクラスが含まれています。作業項目の送信、非同期 I/O の処理など、スレッドのグループを管理する ThreadPool クラス、指定した時間の後にデリゲートを呼び出すことができる Timer クラス、および一度に 1 つしか使用できない複数のスレッドの同期をとる Mutex クラスが含まれます。

Thread クラスはスレッドの制御を行うことができるクラスです。スレッドの優先順位の設定などを行うことができます。Thread.Sleep(1000); を実行すると、スレッドを1秒間止めることができます。

Windows アプリケーション - Windows フォーム、ユーザーコントロール、ボタンなどのコントロール、コンポーネント、コモンダイアログボックス

System.Windows.Forms

System.Windows.Forms 名前空間には、Windows アプリケーションのユーザーインターフェイスを構築するために必要なクラスが含まれています。System.Windows.Forms 名前空間に含まれるクラスは、フォームとユーザーコントロール、コントロール、コンポーネント、コモンダイアログボックスの 4 つのカテゴリに大別できます。

フォームとユーザーコントロールには、アプリケーション内のウィンドウを表す Form クラスと、ほかのコントロールと複合されたカスタムコントロールを作成するための UserControl クラスが含まれています。Form クラスには、ダイアログボックス、モードレスウィンドウ、MDI クライアントウィンドウと親ウィンドウが含まれます。

コントロールには、リッチなユーザーインターフェイスを構築するための様々なコントロールが含まれます。TextBox クラス、Label クラス、ComboBox クラス、Button クラス、ToolBar クラス、ListView クラスなどの基本的なコントロールをはじめ、デザイナで参照できるコントロールのプロパティを表示するための PropertyGrid クラスなどのクラスも含まれています。このカテゴリに含まれるクラスは Control クラスから派生されています。

コンポーネントには、マウスがコントロールの上を移動するときにコントロール上に簡単な説明を表示するための ToolTip クラス、フォーム上のコントロールにエラーが関連付けられていることを示すための ErrorProvider クラス、Windows フォームにメニューを提供するための Menu クラス、ヘルプ情報を表示させるための Help クラス、HelpProvider クラスなど、Window ベースのアプリケーションに対して表示機能を提供します。このカテゴリに含まれるクラスは Control クラスからは派生していません。

コモンダイアログボックスには、ファイルを選択するダイアログウィンドウを表示する FileDialog クラス、ファイルを開くために使用する OpenFileDialog クラス、インストールされているフォントのリストを表示する FontDialog クラス、使用できる色とユーザーがカスタムカラーを定義するために使用できるコントロールを表示するための ColorDialog クラス、プリンタを選択肢、印刷するドキュメント部分を選択するための PrintDialog クラス、印刷時の余白や用紙方向などのページ設定を操作するための PageSetupDialog クラス、印刷プレビュー画面を表示するための PrintPreviewDialog クラスなどが含まれます。さらに、通常のメッセージボックスを表示させるための MessageBox クラスもこのカテゴリに含まれます。

System.Windows.Forms.Design

System.Windows.Forms.Design 名前空間には、Windows フォームのデザイン時のサポートを拡張するためのクラスが含まれています。ActiveX コントロールをインポートし、デザイナからアクセスできるラッパーを作成するための AxImporter クラス、Anchor プロパティのためのユーザーインターフェイスを提供する AnchorEditor クラス、ファイル名を選択するためのユーザーインターフェイスを提供する FileNameEditor クラス、選択やリンクのためのイベントを表示できるプロパティタブを提供するための EventsTab クラスが含まれます。

データベース - ADO.NET、OLE DB、SQL Server との交信

System.Data

System.Data 名前空間には、ADO.NET アーキテクチャを形成するクラスが含まれます。ADO.NET は .NET Framework で採用しているデータアクセスのアーキテクチャで、OLE DB や XML 経由で公開されるデータソースだけでなく、Microsoft SQL Server などのデータソースに対する一貫性を持ったアクセス機能を提供しています。ADO.NET アーキテクチャを使用することにより、複数のデータソースのデータを効率よく管理するコンポーネントを作成できます。

データのメモリ内キャッシュを表す DataSet クラスは、インメモリデータの単一のデータソースのテーブルを表す DataTable オブジェクトを複数含むことができます。これらのクラス以外に、DataTable 内の列のスキーマを表す DataColumn クラス、並べ替え、フィルタ処理、検索、編集、移動を実行するためのカスタマイズ可能なDataTable のビューを表す DataView クラス、2 つの DataTable 間のリレーションを表す DataRelation クラスなどが含まれます。

System.Data.Common

System.Data.Common 名前空間には、.NET データプロバイダによって共有されるクラスが含まれています。.NET データプロバイダは、マネージ空間のデータソースへのアクセスに使用するクラスのコレクションを記述します。DataSet へのデータの格納およびデータソースの更新に使用されるデータコマンドやデータベース接続を表す DataAdapter クラス、ソーステーブルと DataTable との間に割り当てられた関係の記述を格納するための DataTableMapping クラス、データアクセスに関するセキュリティレベルをユーザーに割り当てるための機能を提供する DBDataPermission クラスなどが含まれます。

System.Data.OleDb

System.Data.OleDb 名前空間には、OLE DB 互換データ ソース用の .NET データプロバイダを構成するクラスが含まれています。これらのクラスを使用すると、OLE DB データソースに接続してコマンドを実行し、その結果を読み取ることが可能になります。System.Data.OleDb には DataSet へのデータの格納とデータソースの更新に使用されるデータコマンドやデータベース接続を表す OleDbDataAdapter クラス、データソースに対して実行する SQL ステートメントやストアドプロシージャを表す OleDbCommand クラス、データソースからデータ行の前方向ストリームを読み取るための OleDbDataReader クラス、データソースで作成する SQL トランザクションを表す OleDbTransaction クラスなどが含まれます。

System.Data.SqlClient

System.Data.SqlClient 名前空間には、SQL Server 用の .NET データ プロバイダを構成するクラスが含まれています。これらのクラスを使用することにより、SQL Server 7.0 以降に接続してコマンドを実行し、その結果を読み取ることが可能になります。この System.Data.SqlClient 名前空間は System.Data.OleDb 名前空間と似ていますが、SQL Server 7.0 以降へのアクセス用に最適化されています。System.Data.SqlClient には、データコマンドやデータベース接続を表す SqlDataAdpter クラス、SQL Server データソースに対して実行する T-SQL ステートメントやストアドプロシージャを表す SqlCommand クラスなどが含まれます。

XML - 生成、表示、パーサー、XSLT 変換

System.Xml

System.Xml 名前空間には、XML を処理するための標準ベースのサポートを提供するクラスが含まれています。この名前空間には、XML ドキュメントを表す XmlDocument クラス、XMl 名をエンコードまたはデコードし、共通言語ランタイムと XSD との間で変換を実行するメソッドを提供する XmlConvert クラス、XML データへの高速で非キャッシュの前方向アクセスを提供するリーダーを表す XmlReader クラスなどが含まれます。

リスト 4 は XML ファイルを読み込んで表示する例です。Visual Studio .NET または Visual C# .NET で C# の Windows フォームアプリケーションを新規に作成し、button 1 つと textBox 2 つを貼り付け、textBox1、textBox2 の MultiLine プロパティを True に、ScrollBars プロパティを Both に変更して図 7 のように配置します。そして、button1 をダブルクリックしてリスト 4 のコードを記述します。このサンプルプログラムでは、textBox1 に XML ファイルの内容を直接表示し、textBox2 にエレメントごとに階層化したデータを表示しています。

using System.Xml; // コードの先頭に追加
 (中略) 
private void button1_Click(object sender, System.EventArgs e)
{
    string tab = "";
    int depth;
    //サンプルなので、XML ファイルを直接指定
    string xmlfile = "c:\\tmp\\tmp.xml";

    // textBox1 に XML ファイルの内容を直接表示
    XmlDocument xmlDocument = new XmlDocument();
    xmlDocument.Load(xmlfile);
    XmlNode xmlRootNode = xmlDocument.DocumentElement;

    this.textBox1.Text = xmlRootNode.InnerXml;

    // textBox2 に XML ファイルの内容を階層化して表示
    XmlTextReader xmlTextReader = new XmlTextReader(xmlfile);
    this.textBox2.Text = "";

    while (xmlTextReader.Read())
    {
        switch(xmlTextReader.NodeType)
        {
            // エレメントの場合
            case XmlNodeType.Element:
                tab = "";
                depth = xmlTextReader.Depth;
                while(depth-- != 0)
                    tab += "\t";
                this.textBox2.Text += tab + "エレメント: " + xmlTextReader.Name.ToString() + "\r\n";
                break;

            // 値の場合
            case XmlNodeType.Text:
                this.textBox2.Text += tab + "\t" + "値: " + xmlTextReader.Value.ToString() + "\r\n";
                break;
        }
    }
}

リスト 4. XML を表示するサンプル

図 7. XML ファイルを階層化して表示

図 7. XML ファイルを階層化して表示

System.Xml.Serialization

System.Xml.Serialization 名前空間には、オブジェクトを XML 形式のドキュメントまたはストリームにシリアル化するために使用されるクラスが含まれています。この名前空間には、オブジェクトから XML ドキュメントへのシリアル化や XML ドキュメントからオブジェクトへの逆シリアル化を行うための XMLSerializer クラスなどが含まれます。

System.Xml.Xpath

System.Xml.XPath 名前空間には、XPath パーサーと評価エンジンに関するクラスが含まれています。XSLT を使用して XML ドキュメントを処理する高速な読み取り専用キャッシュを提供する XPathDocument クラス、コンパイルした XPath 式をカプセル化する XPathExpression クラス、カーソルモデルを使用して任意のデータストアからデータを読み取る XPathNavigator クラスなどが含まれます。

System.Xml.Xsl

System.Xml.Xsl 名前空間には、XSLT 変換のサポートを提供するクラスが含まれています。XSLT スタイルシートを使用して XML データを変換する XslTransform クラス、XSLT プロセッサの現在の実行コンテキストをカプセル化する XsltContext クラスなどが含まれます。XsltContext クラスを使用すると、XPath が XPath 式内の関数、パラメータ、名前空間を解決できるようになります。

System.Xml.Schema

System.Xml.Schema 名前空間には、XSD スキーマに対して標準ベースのサポートを提供する XMl クラスが含まれています。スキーマの定義を格納する XmlSchema クラス、XSD スキーマと XDR スキーマのキャッシュを格納するための XmlSchemaCollection クラス、複合型の複合コンテンツモデルを表す XmlSchemaComplexContent クラス、任意のスキーマからスキーマコンポーネントをインポートする XmlSchemaImport クラス、外部スキーマの宣言や定義を含める XmlSchemaInclude クラスなどが含まれます。

デバッグ用の機能 - トレース、イベントログの操作、プロセスの起動と中断

System.Diagnostics

System.Diagnostics 名前空間には、システムのリソースを活用するクラスや、デバッグ用のコードのトレースするクラスが含まれています。Windows のイベントログとの対話を実現する EventLog クラス、ローカルプロセスとリモートプロセスにアクセスし、ローカルシステムプロセスの起動と中断を可能にする Process クラス、Windows NT パフォーマンスカウンタコンポーネントを表す PerformanceCounter クラスなどのシステムリソースを活用するクラス群や、コードの実行をトレースするためのクラスである Trace クラス、トレースやデバッグの出力を制御する TraceSwitch クラスなどのデバッグを容易にするためのクラス群を含みます。

トレース用のコードをアプリケーション内に用意しておくと、TraceSwitch を使用してトレースのメッセージ出力のオン、オフを制御することができます。このトレースの出力の制御は再コンパイルを必要としないため、実稼動中のアプリケーションの診断を行うこともできるようになります。

リスト 5 は System.Diagnostics 名前空間の Process クラスと Trace クラスを使用したコンソールプログラムです。このプログラムの起動時に引数として notepad.exe などのアプリケーションのファイル名を渡すと、そのアプリケーションを起動させます。

#define TRACE
using System;
using System.Diagnostics;

namespace StartProcess
{
    class Class1
    {
        [STAThread]
        static void Main(string[] args)
        {
            // 新しいプロセスの作成
            Process process;
            process = new Process();
            // コンソールにトレースメッセージを表示させる
            Trace.Listeners.Add(new TextWriterTraceListener(Console.Out));
            Trace.WriteLine(args[0]);  // アプリケーション名の表示

            try
            {
                // コマンドラインに渡されたアプリケーションを実行する
                process.StartInfo.FileName = args[0];
                process.Start();
            }
            catch
            {
                // 例外が発生したらエラーメッセージを表示する
                Trace.Indent();
                Trace.WriteLine("引数が正しくありません");
                Trace.Unindent();
            }
        }
    }
}

リスト 5. アプリケーションの起動とトレースメッセージ

そのほかの機能 - 標準入出力、型の変換、数学関数と定数、乱数、文字列

System 直下の主なクラス

ここまでで主な名前空間の説明を行いましたが、いちばん最初の説明した System 名前空間には最も基本的なクラスが 100 近く含まれています。その中から標準入出力や文字列操作などのいくつかのクラスを紹介します。

System.Console

標準入出力ストリームからの読み込みや書き込みをサポートします。.NET Framework SDK を使用している場合のテスト時などに使用します。この Console クラスには、標準入力ストリームから文字を読み取る Read メソッドや1行分の文字をまとめて読み取る ReadLine メソッド、標準出力ストリームに文字や文字列を書き込む Write メソッド、WriteLine メソッドなどが用意されています。

System.Convert

.NET Framework は、Int32 型、Decimal 型、Double 型、String 型など多数の型をサポートしています。当然 Int32 型の値をそのまま String 型の変数に入れることはできないので、型変換を行う必要があります。Convert クラスは、このような異なる型の変換を行うクラスです。ToInt32 メソッドは指定した値を Int32 型に変換し、ToString メソッドは指定した値を String 型に変換します。例えば System.Console クラスの WriteLine メソッドはストリング型の値を引数としますので、Int32 型の数値データを WriteLine を使用して表示するときには、その数値データを ToString メソッドを使用して String 型に変換したあとで引数として渡します。

System.Math

一般的な数値関数と定数が含まれています。Math クラスは、三角関数の Sin メソッド、Cos メソッド、Tan メソッドを初めとして、平方根を返す Sqrt メソッド、絶対値を返す Abs メソッド、対数を返す Log メソッド、与えられた 2 つの数のうち大きい数または小さい数を返す Max メソッド、Min メソッドなどをサポートしています。定数としては、定数 e を表す E と、円周率 π を表す PI をサポートしています。

System.Random

Random クラスはその名のとおりランダムな数値を生成するクラスです。Next メソッドを使用して正の整数の乱数や、指定した範囲内の乱数を生成することができます。NextDouble メソッドを使用すると 0.0 と 1.0 の間の乱数を返します。

System.String

String クラスには文字列を操作するためのメソッドが数多く含まれます。文字列の指定した位置に別の文字列を挿入する Insert メソッド、指定した位置の文字を削除する Remove、文字列の中に含まれる特定の文字をすべて置換する Replace メソッド、文字列中の一部の文字列を取り出す Substring メソッド、大文字や小文字に変換した文字列を返す ToUpper メソッドや ToLower メソッド、指定した書籍に変換する Format メソッドなどをサポートしています。

リスト 6 は、Console、Convert、Math、Random、String クラスを使用した例です。Random クラスの NextDouble メソッドを使用して取得した 0.0 から 1.0 までの間の値に対するコサインの値を計算して、標準出力に書き込んでいます。途中で Convert クラスの ToString メソッドを使用して double 型を string 型に変換し、さらに String クラスの Substring メソッドを使用して文字列を抜き出しています。

using System;

namespace ConsoleApplication1
{
    class Class1
    {
        [STAThread]
        static void Main(string[] args)
        {
            String str;
            double d1, d2;
            Random rdm = new Random();

            // Ramdom クラスの NextDouble を使用して任意の 0.0 から 1.0 までに値を取得
            d1 = rdm.NextDouble();
            // Math クラスの Cos メソッドを使用して、コサインを取得
            d2 = Math.Cos(d1);
            // Convert クラスの ToString メソッドを使用して文字列に変換
            // double 型は ToString メソッドをサポートしているため、str = d2.ToString(); とコーディングすることも可能
            // 文字列から他の型への変換は Convert.ToDouble(str); のように通常は Convert クラスを使用する
            str = Convert.ToString(d2);
            // String クラスの Substring メソッドを使用し、先頭から 5 文字を抜き出す
            str = str.Substring(0, 5);
            // Console クラスの WriteLine メソッドを使用して標準出力に結果を書き込む
            Console.WriteLine("Cos({0}) : " + str, d1);
        }
    }
}

リスト 6. System 名前空間の Console、Math クラスを使用した例

まとめ - .NET Framework をぜひ使ってみよう

.NET Framework のメリット

このように、.NET Framework のクラスライブラリには多くの名前空間が含まれ、さらに各名前空間には数多くのクラスが含まれます。ファイルの読み書き、ユーザーインターフェイスの構築などの従来のアプリケーションから使用していた基本的な機能はもちろん、XML の取り扱い、XML Web サービスなど次世代インターネットに求められる機能までサポートしています。アプリケーション構築に必要な基本的な機能を含んでいるため、開発者は自分自身がインプリメントしたい機能に特化してプログラミングを行うことができます。

今回はあらかじめ .NET Framework に含まれる機能しか説明しませんでしたが、これらの機能を拡張することや、新たな機能を追加することも容易にできます。.NET Framework を使用して作成されたコンポーネントやビジネスフレームワークは他の .NET Framework アプリケーションから用意に使用することができるため、そのような外部のフレームワークを使用して生産性を向上させることもできます。そのような柔軟なプログラミングを行うことができることも .NET Framework のメリットのひとつです。また、すべてのサンプルコードを C# を使用してコーディングしていますが、Visual Basic .NET からも全く同じことをすることが可能です。このように、得意な言語を使用してプログラミングを行うことができることも .NET Framework のメリットのひとつです。

.NET Framework は Visual Studio .NET から使うだけでなく、Web からのダウンロードなどにより無償で入手可能な .NET Framework SDK のみを使用して体験することもできます。この機会に、.NET Framework の大いなる魅力を体験してみませんか。