namespace 關鍵字用於聲明包含一組相關對象的作用域。可以使用命名空間來組織代碼元素並創建全局唯一類型。
namespace SampleNamespace
{
class SampleClass { }
interface ISampleInterface { }
struct SampleStruct { }
enum SampleEnum { a, b }
delegate void SampleDelegate ( int i );
namespace Nested
{
class SampleClass2 { }
}
}
文件範圍的命名空間聲明使你能夠作出以下聲明:一個文件中的所有類型都在一個命名空間中。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 語句,則它們的範圍在命名空間本身內。
例如:
// 這種使用是在命名空間作用域之外的,因此它適用於全局
using System;
namespace SampleNamespace; // 文件作用域的命名空間聲明
// 這種使用是在命名空間作用域中
using System.Text;
public class SampleClass
{
// Class members...
}
在上面的示例中,System 全局可訪問,而 System.Text 僅適用於 .SampleNamespace。
前面的示例不包括嵌套命名空間。文件範圍的命名空間不能包含其他命名空間聲明。不能聲明嵌套的命名空間或第二個文件範圍的命名空間:
namespace SampleNamespace;
class AnotherSampleClass
{
public void AnotherSampleMethod()
{
Console . WriteLine ( "例子空間內的例子方法");
}
}
namespace AnotherNamespace; // 不允許!
namespace ANestedNamespace // 不允許!
{
// 聲明……
}
在命名空間中,可以聲明零個或多個以下類型:
- class
- interface
- struct
- enum
- delegate
- 可以聲明嵌套的命名空間(文件範圍的命名空間聲明除外)
編譯器會添加默認命名空間。此未命名的命名空間(有時被稱為全局命名空間)存在於每個文件中。它包含未包含在已聲明的命名空間中的聲明。全局命名空間中的任何標識符都可用於已命名的命名空間。
命名空間隱式具有公共訪問權限。
可以在兩個或多個聲明中定義一個命名空間。例如,以下示例將兩個類定義為 MyCompany 命名空間的一部分:
namespace MyCompany.Proj1
{
class MyClass
{
}
}
namespace MyCompany.Proj1
{
class MyClass1
{
}
}
以下示例顯示如何在嵌套命名空間中調用靜態方法。
namespace SomeNameSpace
{
public class MyClass
{
static void Main()
{
Nested.NestedNameSpaceClass.SayHello();
}
}
// 嵌套的空間
namespace Nested
{
public class NestedNameSpaceClass
{
public static void SayHello()
{
Console.WriteLine("你好啊!");
}
}
}
}