フレッシュマン企画 連載
簡単!Visual Studio 2005入門

第3回 .NETのコードを理解するための基礎知識

デジタルアドバンテージ 一色 政彦
2007/05/28
Page1 Page2 Page3

ひな型コードの「名前空間」と「クラス」

 それでは、ソース・コード「Form1.cs」を参照して「名前空間」と「クラス」を確かめてみよう。

……前略……
namespace WindowsApplication1
{
  public class Form1 : System.Windows.Forms.Form
  {
    ……中略……
  }
}
ソース・コード(Form1.csファイル)の「名前空間」と「クラス」(一部改変)
「namespace」が名前空間を意味し、「class」がクラスを意味する。

 C#では「namespace」(VBでは「Namespace」)がオブジェクトを分類するための境界線である「名前空間」を意味し、「class」(VBでは「Class」)がオブジェクトそのものである「クラス」を意味する。namespaceに続けて記述されている「WindowsApplication1」が名前空間の名称で、classに続けて書かれている「Form1」がクラスの名称である。

 これを先ほどの例の「○○ソフト会社の山田です」と同じように表現すると

  「WindowsApplication1名前空間のForm1クラスです」

となり、C#のコードで表記すると「.(ドット)」でつなげて

  「WindowsApplication1.Form1」

になる。

 当然ながら、名前空間とクラスには始まり(開始地点)と終わり(終了地点)がある。この始まりと終わりの間は「スコープ」(=範囲)と呼ばれ、C#の名前空間やクラスではスコープの始まりは「{」で表し、終わりは「}」で表す(VBの名前空間やクラスでは、スコープの終わりに「End Namespace」や「End Class」を記述することで、それぞれのスコープを確定する)。

 名前空間のスコープの中では、各行の左端に余白(「インデント」と呼ばれる)が作られているが、これはほかの行と開始文字の位置をずらすことで、名前空間のスコープ内であることを明確に表現するためのものである(インデントの設定や調整については、.NET TIPSの「ソース・コードを一瞬で整形するには?」を参照するとよい)。

「名前空間」と「クラス」の基本的な書き方(構文)

 C#での名前空間(=クラスを分類してグループ化するための境界線)の基本的な書き方は、次のとおりだ。

namespace <名前空間の名称>
{
  ……中略(ここにクラスを書く)……
}

 「……中略(ここにクラスを書く)……」の部分にクラスを書き込む。そのクラスの書き方は、次のとおりだ。

public class <クラスの名称> : <基底クラスの名称>
{
  ……中略……
}

 classの前にあるpublicはアクセシビリティ(アクセス制御)を指定するための修飾子である。このpublic修飾子(VBではPublic修飾子)で修飾されたclassは、「どのクラスからでもアクセス可能な状態」になる。ほかにも、クラスがあるプロジェクト内(=アセンブリ内)からのみアクセス可能にするinternal修飾子(VBではFriend修飾子)がある。クラスに対してアクセシビリティを明示しない場合、自動的にinternal修飾子が付与される。アクセシビリティは実際のプログラミングで必要になって初めてその価値が理解できると思う。よって、取りあえず現段階では、オブジェクト指向プログラミングではアクセシビリティを設定する必要があるということを知っておいてほしい。

 <クラスの名称>に続き「:(コロン)」で区切られて指定されたクラスは、基底クラス(Base Class)と呼ばれる(「基本クラス」「スーパー・クラス」、「親クラス」とも呼ばれる)。また、「:」の前にあるクラスは派生クラス(Derived Class)と呼ばれる(「サブ・クラス」、「子クラス」とも呼ばれる)。

 基底クラスと派生クラスの記述は、新たに作成する派生クラスが基底クラスの全特徴を引き継ぐことを意味している。例えば、冒頭で示した次のコードでは「Form1」クラス(派生クラス)が「System.Windows.Forms.Form」クラス(基底クラス)の全特徴を引き継いでいる。

public class Form1 : System.Windows.Forms.Form
{
  ……中略……
}

 このように、ある基底クラスの全特徴を引き継いで新たなクラスを作成することを、オブジェクト指向では「継承」と呼ぶ。

 「継承」を現実世界で例えると、「人間」の全特徴を引き継ぎ、さらに「ボーっとしている」「博多ラーメンが好きである」などの独特な特徴(=個性)が付け加えられて、「山田」という人物が作成されることになる。この例で分かるように、オブジェクト指向の継承は、基底クラスの全特徴を引き継ぎ、さらに何らかの特徴を付け加えて拡張した新たなクラスを作成するための機能である。

 なお、継承を使わずに新しいクラスを作成することもできる。その場合には、「: <基底クラスの名称>」の部分を省略すればよい(ちなみにソース・コード(Program.csファイル)では、実際に基底クラスの記述が省略されたProgramクラスが定義されている)。

 先ほど示したコードにある基底クラスの「System.Windows.Forms.Form」は、名前空間とクラスを「.(ドット)」で連結した書き方で、「System.Windows.Forms名前空間のFormクラス」という意味になる。名前空間の内容が「System.Windows.Forms」というように、「.」でさらに細かく分かれているが、このように名前空間は大分類/中分類/小分類のように階層的な分類を構成することが可能である。これを現実世界の階層的な分類で置き換えるなら、「日本の東京の○○ソフト会社」(=名前空間)の「山田」(=クラス)と表現するのと同じである。

 ちなみに、いうまでもなく、このSystem.Windows.Forms名前空間のFormクラスは、.NETのクラス・ライブラリにあらかじめ用意されたクラスである。

 それでは次のページで、Form1クラスがどのようにして実行されるのかを見ていこう。


 INDEX
  [フレッシュマン企画 連載]簡単!Visual Studio 2005入門
  第3回 .NETのコードを理解するための基礎知識
    1.オブジェクト指向の世界観
  2.ひな型コードの名前空間とクラス
    3.アプリケーションのエントリ・ポイント
 
インデックス・ページヘ  「簡単!Visual Studio 2005入門」


Insider.NET フォーラム 新着記事
  • 第2回 簡潔なコーディングのために (2017/7/26)
     ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている
  • 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
     Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう
  • 第1回 明瞭なコーディングのために (2017/7/19)
     C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える
  • Presentation Translator (2017/7/18)
     Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Insider.NET 記事ランキング

本日 月間