命名空间

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);

前面的示例不包括嵌套命名空间。 文件范围的命名空间不能包含其他命名空间声明。 不能声明嵌套的命名空间或第二个文件范围的命名空间:

namespace SampleNamespace;

class AnotherSampleClass
{
    public void AnotherSampleMethod()
    {
        System.Console.WriteLine(
            "SampleMethod inside SampleNamespace");
    }
}

namespace AnotherNamespace; // Not allowed!

namespace ANestedNamespace // Not allowed!
{
   // declarations...
}

在命名空间中,可以声明零个或多个以下类型:

编译器会添加默认命名空间。 此未命名的命名空间(有时被称为全局命名空间)存在于每个文件中。 它包含未包含在已声明的命名空间中的声明。 全局命名空间中的任何标识符都可用于已命名的命名空间。

命名空间隐式具有公共访问权限。 有关可以分配给命名空间中元素的访问修饰符的讨论,请参阅访问修饰符

可以在两个或多个声明中定义一个命名空间。 例如,以下示例将两个类定义为 MyCompany 命名空间的一部分:

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# 语言规范中的命名空间部分。 有关文件范围命名空间声明的详细信息,请参阅功能规范

另请参阅