連載C#入門第10回 namespaceとusing |
ベータ2への切り替え
本連載では、これまで、Visual Studio .NETの日本語版ベータ1を使用し、英語版ベータ2でも動作確認するという方法で行ってきた。しかし、今回より、Visual Studio .NET日本語版ベータ2を前提に解説とサンプルソースの記述を行うこととした。今回以降のサンプルソースは、ベータ1上での実行を保証しないので、読者の皆さんも、ベータ2への切り替えをお願いしたい。
ネストするnamespace
C#は「コンポーネント指向のプログラム言語」だと言われるが、コンポーネント指向とは、すでに作成済みのクラスを持ち寄って、それを利用する形でコーディングを行うことを意味する。その際、まったく無関係に開発されたクラスを集めると、同じ名前のクラスが存在することがあり、名前の衝突というやっかいな問題が発生する可能性がある。これを解決するために、C#では、個々のクラスは、より大きなnamespace(名前空間)に所属するものと考え、namespaceを区別することで、同じ名前のクラスを使い分けることを可能とする。
namespaceについては、この連載の第2回目にも取り上げているので、今回は、そこで述べなかったことを説明する。
まず、namespaceはネスト可能であることに注目してみよう。以下に1つの例を示す。
|
|
ネストしたnamespaceを使用したサンプル・プログラム1 |
これを実行した結果は以下のようになる。
サンプル・プログラム1の実行結果 |
ネストしたnamespaceも、ピリオド区切りの単一の名前と同様に扱うことができる。 |
ここでは3〜12行目で、Space1.Sub1というネストしていないnamespaceを宣言している。次に14〜26行目で、Space2というnamespaceを宣言し、その内部(16〜25行目)でネストしたnamespaceであるSub1を宣言している。このnamespace内のメソッドを呼び出す場合は、34〜35行目を見て分かるとおり、どちらを呼び出す場合も表記は似たようなものになる。Space1.Sub1のようにピリオドで区切られたnamespaceはそのまま使うが、Space2内にSub1がある、ネストしたnamespaceも、Space2.Sub1のようにピリオド区切りで表記するので、結果的にほとんど同じに見える。実際、この2つの書式には機能的な差はない。つまり、namespaceを宣言する際、ピリオド区切りの単一の名前で書いてもよいし、ネストしたnamespaceとして宣言してもよい。
繰り返し宣言されるnamespace
namespaceの宣言は、1つのブロックにまとめねばならないという制約はない。つまり、同じ名前のnamespaceの宣言が何回出現してもよい。この機能は、非常に重要なものだ。例えば、クラスを100個持つnamespaceを作ろうとしたとき、すべてのクラスが1個のブロック内になければならないという制約があるとしたら、100個のクラスを1個のソースファイル上に記述しなければならず、ソースコードサイズが肥大化して扱いにくくなる。だが、namespaceの宣言が分散を許せば、クラスごとに1ソースファイルとすることもでき、扱いやすくなる。
実際に、同じnamespaceを2つに分けて宣言した例を以下に示す。
|
|
同じnamespaceを2つに分けて宣言したサンプル・プログラム2 |
これを実行した結果は以下のようになる。
サンプル・プログラム2の実行結果 |
同じ名前の複数のnamespaceにクラスを分けて記述することができる。 |
3〜12行目ではSpace1という名前のnamespaceを宣言している。同じように、14〜23行目でも、同じSpace1というnamespaceを宣言している。2つに分かれているが、これは2つとも、同じnamespaceの宣言の一部として機能する。その証拠に、もし、16行目のClass2というクラスの宣言を、Class1という名前に変更するとエラーになる。なぜなら、Space1というnamespaceの中では、すでに5行目で、Class1という名前のクラスが宣言済みだからだ。1つのnamespaceの中に、同じ名前のクラスを2つ以上持つことはできない。
INDEX | ||
第10回 namespaceとusing | ||
1.ベータ2への切り替え | ||
2.namespaceやクラスの別名を宣言するusing | ||
3.不完全なnamespaceとusing | ||
「C#入門」 |
- 第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用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
|
|