それでは、実際にひな形のソース・コードを参照して「名前空間」と「クラス」を確かめてみよう。
……前略……
namespace WindowsApplication1
{
/// <summary>
/// Form1 の概要の説明です。
/// </summary>
public class Form1 : System.Windows.Forms.Form
{
……中略……
}
}
C#では「namespace」(VB.NETでは「Namespace」)がオブジェクトを分類するための境界線である「名前空間」を意味し、「class」(VB.NETでは「Class」)がオブジェクトそのものである「クラス」を意味する。namespaceに続けて記述されている「WindowsApplication1」が名前空間の名称で、classに続けて書かれている「Form1」がクラスの名称である。これを先ほどの例の「○○ソフト会社の一色です」と同じように表現すると、「WindowsApplication1名前空間のForm1クラスです」となり、実際のC#のコードでは「.(ドット)」でつなげて「WindowsApplication1.Form1」のように表現できる。
ところで、映画『The Matrix Revolutions』には「始まりがあるものにはすべて終わりがある ―― Everything that has a beginning has an end.」というキャッチコピーがあったが、実はプログラミングの世界にもこれとまったく同じ定理が存在する。つまり、名前空間にもクラスにも必ず始まりと終わりがあるということだ。この始まりと終わりの間は「スコープ(=範囲)」と呼ばれ、C#の名前空間やクラスではスコープの始まりは「{」で表し、終わりは「}」で表す(VB.NETの名前空間やクラスでは、スコープの終わりに「End Namespace」や「End Class」を記述することで、それぞれのスコープを確定する)。
名前空間のスコープの中では、各行の左端に余白(「インデント」と呼ばれる)が作られているが、これはほかの行と開始文字の位置をずらすことで、名前空間のスコープ内であることを明確にするためのものである(インデントの設定や調整については、.NET TIPSの「ソース・コードのインデントを手軽に整えるには?」を参照するとよい)。
C#では「//」や「///」(VB.NETでは「'」)が記述されている行は「コメント」と呼ばれ、「//」から、その行の行末までの部分は最終的に生成されるプログラムには含まれない。このコメントを使えば、プログラムの内容説明や注意書きをソース・コードの中に記述することができる。また、既存のコードの先頭部分に「//」を記述すれば、そのコードをコメント化、つまりプログラムに含まれないようにすることができる(「コメント・アウト」と呼ばれる)。
上記コードのコメントの中にある「<summary>」や「</summary>」はコード・コメントと呼ばれ、ソース・コードからAPIリファレンスを作成するためのものだ(詳細は「Visual Studio .NETによるチーム開発事始め ― Visual C# .NETでAPIリファレンスを作る(後編)」を参照してほしい)。
C#での名前空間(クラスを分類してグループ化するための境界線)の書き方は、次のとおりだ。
namespace <名前空間の名称>
{
……中略(ここにクラスを書く)……
}
「……中略(ここにクラスを書く)……」の部分にクラスを書き込む。そのクラスの書き方は、次のとおりだ。
public class <クラスの名称> : <基底クラスの名称>
{
……中略……
}
classの前にあるpublicはアクセシビリティ(アクセス制御)を指定するための修飾子である。このpublic修飾子(VB.NETではPublic修飾子)で修飾されたclassは、「どのクラスからでもアクセス可能な状態」になる。ほかにも、一部のクラスだけがアクセスできるようにするprotected修飾子(VB.NETではProtected修飾子)や、ほかのクラスからはアクセスできないようにするprivate修飾子(VB.NETではPrivate修飾子)などがある。アクセシビリティは実際のプログラミングで必要になって初めてその価値が理解できると思う。よって、取りあえず現段階では、オブジェクト指向プログラミングではアクセシビリティを設定する必要があるということを知っておいてほしい。
<クラスの名称>に続き「:(コロン)」で区切られて指定されたクラスは、基底クラス(Base Class)と呼ばれる(「基本クラス」「スーパー・クラス」、「親クラス」とも呼ばれる)。また、「:」の前にあるクラスは派生クラス(Derived Class)と呼ばれる(「サブ・クラス」、「子クラス」とも呼ばれる)。
基底クラスと派生クラスの記述は、新たに作成する派生クラス(ひな形コードでは「Form1」クラス)が基底クラス(ひな形コードでは「System.Windows.Forms.Form」クラス)の全特徴を引き継ぐことを意味している。このように、ある基底クラスの全特徴を引き継いで新たなクラスを作成することを、オブジェクト指向では「継承」と呼ぶ。
「継承」を現実世界で例えるとすると、「人間」の全特徴を引き継ぎ、さらに「ボーっとしている」「博多ラーメンが好きである」などの独特な特徴(=個性)が付け加えられて、「一色」という人物が作成されることになる。この例で分かるように、オブジェクト指向の継承は、基底クラスの全特徴を引き継ぎ、さらに何らかの特徴を付け加えて拡張した新たなクラスを作成するための機能である。
なお、継承を使わずに新しいクラスを作成することもできる。その場合には、「: <基底クラスの名称>」の部分を省略すればよい。
ひな形コードにある基底クラスの「System.Windows.Forms.Form」は、名前空間とクラスを「.(ドット)」で連結した書き方で(前述)、「System.Windows.Forms名前空間のFormクラス」という意味になる。名前空間の内容が「System.Windows.Forms」というように、「.」でさらに細かく分かれているが、このように名前空間は大分類/中分類/小分類のような階層的な分類を構成することが可能である。これを現実世界の階層的な分類で置き換えるなら、「日本の東京の○○ソフト会社」(=名前空間)の「一色」(=クラス)と表現するのと同じである。
ちなみに、いうまでもなく、このSystem.Windows.Forms名前空間のFormクラスは、.NETのクラス・ライブラリにあらかじめ用意されたクラスである。
それでは次のページで、Fom1クラスがどのようにして実行されるのかを見ていこう。
Copyright© Digital Advantage Corp. All Rights Reserved.