namespace 关键字用于声明包含一组相关对象的作用域。可以使用命名空间来组织代码元素并创建全局唯一类型。

namespace MMKJ示例
    {
        class Lei示例 { } // 一个类
        interface I接口示例 { } // 一个接口
        struct JG示例 { } // 一个结构
        enum MJ示例 { a, b } // 一个枚举
        delegate void WT示例 ( int i ); // 委托示例
        namespace 嵌套的命名空间
            {
                class Lei示例2 { }
            }
    }

文件范围的命名空间声明使你能够作出以下声明:一个文件中的所有类型都在一个命名空间中。C# 10 中可使用文件范围的命名空间声明。以下示例与前面的示例类似,但使用了一个文件范围的命名空间声明:

using System; // 使用了 System 命名空间
namespace kj文件范围; // 命名命名空间
class Lei示例 { } // 声明类
interface I接口示例 { } // 声明接口
struct JG示例 { } // 声明结构
enum MJ示例 { a, b } // 声明枚举
delegate void WT示例 ( int i ); // 声明委托

使用文件作用域 namespace 中的语句

使用文件范围的 namespace 时,语句的位置 using 会影响其在文件中的范围。文件范围的命名空间低于等效的传统命名空间声明,该声明以文件末尾的右括号结尾。此行为确定在何处 using 应用指令,如下所示:

  • 如果语句 using 放置在文件范围的 namespace 声明之前,则它们被视为不在 namespace 之外,并解释为完全限定的命名空间
  • using 如果在文件范围的命名空间声明之后放置这些语句,则它们的范围在命名空间本身内。
    例如:
// 这种用法在 namespace 范围之外,因此它适用于全局
using System;

namespace KJ示例; // 文件范围内的 namespace 声明

// 这个 using 在命名空间作用域中使用
using System . Text;

public class Lei示例
{
    // 类成员……
}

在上面的示例中,System 全局可访问,而 System . Text 仅适用于 KJ示例。

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

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

  • class
  • interface
  • struct
  • enum
  • delegate
  • 可以声明嵌套的 namespace(文件范围的 namespace 声明除外)

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

命名空间隐式具有 public 访问权限。

可以在两个或多个声明中定义一个命名空间。例如,以下示例将两个类定义为“我的公司”命名空间的一部分,并展示了如何调用嵌套命名空间中的静态方法:

static void Main ( )
    {
        {
            Lei2 项目 = new ( );
            项目 . NiHao ( );
        }
    }

namespace 我的公司 . 项目1
    {
        class 项目1
            {
            }
    }

namespace 我的公司 . 项目2
    {
        class 项目2
            {
            }

        public class Lei2
             {
                 public void NiHao ( )
                       {
                             Console . WriteLine ( "你好" );
                       }
             }

兔子码农
4 声望1 粉丝

一个酒晕子