|  |  | 
 
| 連載:[完全版]究極のC#プログラミングChapter10 名前空間のエイリアス修飾子と外部アセンブリ川俣 晶2009/12/14
 |  | 
| 
 | 
10.2 グローバルな名前空間の強制
 ここまで見てきた使い方とは別に、名前空間エイリアス修飾子には、グローバルな名前空間を強制する使い方もある。これを用いないとうまくコンパイルできないケースがあるので、価値は大きい。実際に、コンパイルできないソースコードがこれによってコンパイル可能になる事例を見てみよう。
 次のリスト10.3は、コンパイルできない例である。
| 
 
| using System;
 namespace A.B
 {
 public class C
 {
 public static void SayHello()
 {
 Console.WriteLine("Hello!");
 }
 }
 }
 
 namespace Sample.A.B
 {
 class C
 {
 }
 }
 
 namespace Sample.Main
 {
 class Program
 {
 static void Main(string[] args)
 {
 A.B.C.SayHello();
 // 次のようなコンパイルエラーとなる
 // 'Sample.A.B.C' に 'SayHello' の定義がありません。
 }
 }
 }
 
 |  | 
| リスト10.3 コンパイルできない例 | 
 コードを書いた側は、最上位の名前空間からすべて書いたのだからA.B.C.SayHello()は見つかるはずだと思うかもしれない。しかし、実際にはA.B.C.SayHello()はSample.A.B.C.SayHello()の省略形だとコンパイラに見なされてしまい、メソッドが見つからないというエラーになっている。
 これを解消するには、「global::」を補えばよい。
| 
 
| // リスト10.3のコードA.B.C.SayHello();
 
 |  | 

| 
 
| // 「global::」を使用global::A.B.C.SayHello(); // 出力:Hello!
 
 |  | 
| グローバル名前空間から解釈することを強制する「global::」を使う | 
 「::」の手前のglobalは、その名前をグローバル名前空間(最上位の名前空間)から解釈することを強制する。これによって、紛らわしい名前空間名として解釈されることを防止できる。
 
 
 
	
		Insider.NET 記事ランキング
		
		
			本日
			月間