命名空间(Namespace)是 C# 中用于组织代码、避免命名冲突、提高代码可维护性的重要机制。可以把它理解为计算机中的文件夹,而类、接口、结构体等就是文件夹里的文件。


一、什么是命名空间?

现实生活中有很多重名的人,例如:

张三(销售部)
张三(技术部)

如果没有部门,就不知道是谁。

同样,在程序中也可能出现多个同名类。

例如:

class Student
{
}

另一个项目也有

class Student
{
}

如果放在同一个程序中,就会发生冲突。

因此,需要命名空间来区分。

例如:

namespace School
{
    class Student
    {

    }
}

namespace Company
{
    class Student
    {

    }
}

这样就是两个完全不同的类。

调用时:

School.Student stu1 = new School.Student();

Company.Student stu2 = new Company.Student();

二、命名空间的作用

主要有四个作用:

1、避免类名冲突(最重要)

例如:

System.IO.File

MyProject.File

虽然都叫 File,但属于不同命名空间。


2、组织代码

大型项目通常有很多模块:

项目

├── User
│      User.cs
│      Login.cs
│
├── Product
│      Product.cs
│      Order.cs
│
├── Common
│      Helper.cs
│      Config.cs

对应命名空间:

namespace MyProject.User
{

}

namespace MyProject.Product
{

}

namespace MyProject.Common
{

}

结构十分清晰。


3、方便管理大型项目

几十万个类不可能全部放在一起。

微软.NET源码就是这样组织的:

System

System.IO

System.Net

System.Text

System.Collections

System.Threading

System.Linq

4、提高代码可读性

例如:

MyCompany.HR.Employee

MyCompany.Sales.Employee

一眼就知道属于哪个模块。


三、命名空间语法

最基本写法:

namespace MyProject
{
    class Program
    {

    }

    class Student
    {

    }
}

多个类可以放在一个命名空间里。


四、命名空间可以嵌套

例如:

namespace MyProject
{
    namespace Models
    {
        class Student
        {

        }
    }
}

等价于:

namespace MyProject.Models
{
    class Student
    {

    }
}

推荐第二种,更简洁。


五、访问命名空间中的类

例如:

namespace School
{
    class Student
    {
        public void Study()
        {
            Console.WriteLine("学习");
        }
    }
}

调用:

School.Student stu = new School.Student();

stu.Study();

输出:

学习

六、using 导入命名空间

如果每次都写:

School.Student stu = new School.Student();

School.Teacher teacher = new School.Teacher();

School.ClassRoom room = new School.ClassRoom();

会很麻烦。

可以使用:

using School;

之后:

Student stu = new Student();

Teacher teacher = new Teacher();

ClassRoom room = new ClassRoom();

代码更简洁。


七、using 的位置

通常写在文件最前面:

using System;
using System.Text;
using School;

namespace Demo
{

}

八、多个 using

可以同时导入多个命名空间:

using System;

using System.IO;

using System.Text;

using System.Collections.Generic;

九、using static(静态导入)

C# 6.0 开始支持:

例如:

using static System.Math;

以前:

double r = Math.Sqrt(25);

double x = Math.Pow(2, 3);

现在:

double r = Sqrt(25);

double x = Pow(2, 3);

更方便。


十、命名空间别名

如果两个命名空间中都有 Student:

using School;

using Company;

会报错:

Student 不明确

解决办法:

using Stu1 = School.Student;

using Stu2 = Company.Student;

然后:

Stu1 s1 = new Stu1();

Stu2 s2 = new Stu2();

十一、global using(C# 10)

以前每个文件:

using System;

using System.Text;

using System.Collections.Generic;

都要写。

现在:

global using System;

global using System.Text;

global using System.Collections.Generic;

整个项目都能使用。

适用于:

  • 公共库
  • ASP.NET Core
  • 大型项目

十二、文件作用域命名空间(C# 10)

传统写法:

namespace Demo
{
    class Student
    {

    }
}

新写法:

namespace Demo;

class Student
{

}

优点:

  • 少一层缩进
  • 更简洁
  • 官方推荐

十三、实际项目目录示例

MyProject

│
├── Models
│      Student.cs
│      Teacher.cs
│
├── Services
│      StudentService.cs
│
├── Controllers
│      StudentController.cs
│
├── Common
│      Logger.cs
│
└── Program.cs

对应命名空间:

MyProject.Models

MyProject.Services

MyProject.Controllers

MyProject.Common

十四、命名规范

微软官方建议:

命名空间采用:

公司名.产品名.模块名

例如:

Microsoft.AspNetCore.Mvc

Microsoft.Extensions.Logging

System.Collections.Generic

企业开发常见:

ABCERP.Models

ABCERP.Service

ABCERP.DAL

ABCERP.Common

ABCERP.Utils

不要使用:

namespace test
{

}

建议:

namespace MyCompany.OrderSystem.Models
{

}

十五、综合案例

using System;

namespace School.Models
{
    class Student
    {
        public string Name { get; set; }

        public void Show()
        {
            Console.WriteLine($"姓名:{Name}");
        }
    }
}

namespace School
{
    class Program
    {
        static void Main()
        {
            Models.Student stu = new Models.Student();

            stu.Name = "张三";

            stu.Show();
        }
    }
}

运行结果:

姓名:张三

十六、总结

知识点说明
Namespace用于组织代码、避免命名冲突
using导入命名空间,简化类名书写
using static导入静态成员,可直接调用静态方法
别名(using =)解决同名类型冲突
global using全项目共享导入(C# 10)
文件作用域命名空间namespace Demo;,减少缩进(C# 10)
命名规范推荐使用 公司名.产品名.模块名
Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐