namespace
namespace
キーワードは、関連する一連のオブジェクトを含む範囲を宣言するために使用されます。 名前空間を利用し、コード要素を整理したり、グローバルに一意の型を作成したりできます。
namespace SampleNamespace
{
class SampleClass { }
interface ISampleInterface { }
struct SampleStruct { }
enum SampleEnum { a, b }
delegate void SampleDelegate(int i);
namespace Nested
{
class SampleClass2 { }
}
}
"ファイル スコープ名前空間宣言" では、ファイルのすべての型が 1 つの名前空間にあることを宣言できます。 ファイル スコープ名前空間宣言は C# 10 で使用できます。 次の例は前の例に似ていますが、ファイル スコープ名前空間宣言が使用されています。
using System;
namespace SampleFileScopedNamespace;
class SampleClass { }
interface ISampleInterface { }
struct SampleStruct { }
enum SampleEnum { a, b }
delegate void SampleDelegate(int i);
ファイル スコープ名前空間でのステートメントの使用
ファイル スコープの名前空間を使用する場合、using
ステートメントの配置はファイル内のスコープに影響します。 ファイル スコープの名前空間は、ファイルの末尾に終わり角かっこで終わる同等の従来の名前空間宣言よりも低くなります。 この動作により、次のように using
ディレクティブが適用される場所が決まります。
using
ステートメントがファイル スコープの名前空間宣言の前に配置された場合、そのステートメントは名前空間の外部として扱われ、完全修飾名前空間として解釈されます。using
ステートメントがファイル スコープの名前空間宣言の後に配置された場合、そのステートメントは名前空間自体内でスコープ指定されます。
次に例を示します。
// This using is outside the namespace scope, so it applies globally
using System;
namespace SampleNamespace; // File-scoped namespace declaration
// This using is inside the namespace scope
using System.Text;
public class SampleClass
{
// Class members...
}
上記の例では、 System
はグローバルにアクセス可能ですが、 System.Text
は SampleNamespace
内でのみ適用されます。
前の例には、入れ子になった名前空間が含まれていません。 ファイル スコープ名前空間には、名前空間宣言を追加できません。 入れ子になった名前空間と 2 つ目のファイル スコープ名前空間は宣言できません。
namespace SampleNamespace;
class AnotherSampleClass
{
public void AnotherSampleMethod()
{
System.Console.WriteLine(
"SampleMethod inside SampleNamespace");
}
}
namespace AnotherNamespace; // Not allowed!
namespace ANestedNamespace // Not allowed!
{
// declarations...
}
名前空間内では、以下の型を 0 個以上宣言できます。
コンパイラによって既定の名前空間が追加されます。 この無名の名前空間はグローバル名前空間とも呼ばれますが、すべてのファイルに存在します。 宣言された名前空間に含まれない宣言が含まれます。 グローバル名前空間内にある識別子は、名前付き名前空間で利用できます。
名前空間には暗黙的にパブリック アクセスが与えられます。 名前空間内の要素に割り当てることができるアクセス修飾子については、「アクセス修飾子」を参照してください。
名前空間は 2 つ以上の宣言で定義できます。 たとえば、次の例では、MyCompany
名前空間の一部として 2 つのクラスを定義しています。
namespace MyCompany.Proj1
{
class MyClass
{
}
}
namespace MyCompany.Proj1
{
class MyClass1
{
}
}
入れ子になった名前空間で静的なメソッドを呼び出す方法の例を次に示します。
namespace SomeNameSpace
{
public class MyClass
{
static void Main()
{
Nested.NestedNameSpaceClass.SayHello();
}
}
// a nested namespace
namespace Nested
{
public class NestedNameSpaceClass
{
public static void SayHello()
{
Console.WriteLine("Hello");
}
}
}
}
// Output: Hello
C# 言語仕様
詳細については、C# 言語仕様に関する記事の「名前空間」に関するセクションを参照してください。 ファイル スコープ名前空間宣言の詳細については、機能の仕様に関するページを参照してください。
関連項目
.NET