|
|
連載:[完全版]究極の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 記事ランキング
本日
月間