C# 命名空间完全指南:避免命名冲突、using 指令与嵌套命名空间
命名空间旨在将一组名称与另一组名称分离。一个命名空间中声明的类名不会与另一命名空间中相同的类名冲突。
定义命名空间
namespace namespace_name {
// 代码声明
}
调用命名空间成员:namespace_name.item_name
基本示例
using System;
namespace first_space {
class namespace_cl {
public void func() { Console.WriteLine("Inside first_space"); }
}
}
namespace second_space {
class namespace_cl {
public void func() { Console.WriteLine("Inside second_space"); }
}
}
class TestClass {
static void Main(string[] args) {
first_space.namespace_cl fc = new first_space.namespace_cl();
second_space.namespace_cl sc = new second_space.namespace_cl();
fc.func(); // Inside first_space
sc.func(); // Inside second_space
Console.ReadKey();
}
}
using 关键字
using 指令声明程序使用指定命名空间中的名称。例如使用 System 命名空间中的 Console 类:
Console.WriteLine("Hello there"); // 简写
System.Console.WriteLine("Hello there"); // 完全限定名
using 指令简化代码
using System;
using first_space;
using second_space;
namespace first_space {
class abc { public void func() { Console.WriteLine("Inside first_space"); } }
}
namespace second_space {
class efg { public void func() { Console.WriteLine("Inside second_space"); } }
}
class TestClass {
static void Main(string[] args) {
abc fc = new abc();
efg sc = new efg();
fc.func();
sc.func();
Console.ReadKey();
}
}
嵌套命名空间
可在命名空间内定义另一命名空间:
namespace namespace_name1 {
namespace namespace_name2 { /* 代码 */ }
}
通过点号访问嵌套成员:namespace_name1.namespace_name2.item
嵌套示例
using System;
using first_space;
using first_space.second_space;
namespace first_space {
class abc { public void func() { Console.WriteLine("Inside first_space"); } }
namespace second_space {
class efg { public void func() { Console.WriteLine("Inside second_space"); } }
}
}
class TestClass {
static void Main(string[] args) {
abc fc = new abc();
efg sc = new efg();
fc.func(); // Inside first_space
sc.func(); // Inside second_space
Console.ReadKey();
}
}
using 别名指令
为命名空间或类型起别名,解决名称冲突:
using ProjectA = MyCompany.ProjectA;
using ProjectB = MyCompany.ProjectB;
using StringList = System.Collections.Generic.List;
全局 using (C# 10+ / .NET 6+)
在 GlobalUsings.cs 或项目文件中定义全局 using,整个项目自动引用:
global using System;
global using System.Linq;
global using System.Collections.Generic;
命名空间设计最佳实践
- 公司名.产品名.功能模块(如
MyCompany.Product.Module) - 避免与 .NET 基础命名空间冲突
- 相关功能聚类在同一命名空间
- 公共 API 命名空间层级不宜过深(2-3 级)
- 内部实现可用
Internal或.Internal后缀命名空间
C语言