当前位置: 首页 > news >正文

C# 命名空间详解

命名空间(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)
命名规范推荐使用公司名.产品名.模块名
http://www.jsqmd.com/news/1168579/

相关文章:

  • 026上海寻宠机构横向测评|不同走失场景精准选队攻略 - GrowUME
  • CANN运行时Stream管理开发指南
  • data-to-paper的文献搜索功能:AI如何自动查找和引用相关研究
  • Apache PLC4X:构建工业物联网统一接口的技术架构深度解析
  • Qwen3.5-35B-A3B-OptiQ-4bit开发者指南:LoRA微调与模型部署全流程
  • EM3080-W条形码扫描模块与dsPIC33EP微控制器集成指南
  • 2026深圳高端大克拉/彩钻回收全攻略|私密无损鉴定,源头高价溢价变现指南 - 全国二奢机构参考
  • LLM 抽象层怎么设计?让 AI 应用不被某一个模型厂商绑定
  • 5分钟玩转FanControl:你的Windows电脑风扇智能管家终极指南
  • 纽扣电池增强器NBM5100A与PIC32MZ的低功耗设计实践
  • Windows 11终极优化指南:如何用WinUtil一键搞定系统设置与软件安装
  • 凌晨还在排队的火锅店怎么选?网红庭院火锅推荐避坑指南 - 品牌2026推荐
  • PPS种群预测:中心点与流形解析
  • 2026年温岭手机维修哪家强?这家公司上榜top7实践经验分享 - GrowUME
  • 如何快速上手Nemotron-Labs-Audex-2B?5分钟完成环境搭建与首次推理
  • UE5内存泄漏排查实战:Memreport与Unreal Insights精准定位性能顽疾
  • AI论文写作工具哪家好用?热门平台深度测评与对比
  • CANN混合矩阵乘优化
  • 2026河源黄金奢侈品回收避坑指南:全城免费上门,这4家正规实体店实测推荐(主推源奢汇) - 生活测评小能手
  • PUBG罗技鼠标宏:从弹道控制到竞技进阶的全方位指南
  • 2026年7月最新北京真力时官方售后客服中心地址电话及服务网点分布 - 亨得利官方服务中心
  • MCP3551 22位Δ-Σ ADC与PIC18微控制器的精密测量应用
  • 2026阜阳装修市场深度测评:十大靠谱家装品牌甄选及装修消费指南 - 装修新知
  • MiniMax-M2.7-MXFP4模型优化指南:从配置文件到推理引擎的全方位调优
  • SolarWinds NTA 12.0 企业网络异常检测:基于NetFlow的3类威胁识别实战
  • 2026 年 7 月卡地亚维保选店攻略:无锡门店维修好不好?师傅技术与设备专业度深度测评 - 卡地亚中国售后中心
  • RAG检索增强生成技术:从原理到生产级实现
  • palera1n终极指南:基于checkm8漏洞的iOS越狱技术深度解析
  • 2026珠三角东莞网站建设外贸独立站开发服务商实力测评报告
  • 2026广东随身wifi行业评测报告:选购指南与关键指标权重分析 - GrowUME