目录
[二 、命名空间的普通使用](#二 、命名空间的普通使用)
[三 、不同命名空间中相互使用 需要引用命名空间或指明出处](#三 、不同命名空间中相互使用 需要引用命名空间或指明出处)
[五、 关于修饰类的访问修饰符](#五、 关于修饰类的访问修饰符)
一、命名空间基本概念:代码的"虚拟文件夹"
定义与本质
命名空间(Namespace)是C#中用于组织和管理代码逻辑的核心机制。它本质上是一个逻辑容器,可以将类、结构、接口等类型进行分组管理,类似于操作系统的文件夹系统。但不同于物理文件夹,命名空间是纯粹的逻辑划分,与文件存储位置无关。就可以把他想成是一个工具包,装载着不同类的工具。
主要作用:
-
命名冲突防护:允许在不同命名空间中使用相同类型名
-
逻辑分组:将相关功能模块组织在一起(如数据访问层、业务逻辑层)
-
访问控制基础:与访问修饰符配合实现代码可见性管理
-
代码复用:通过合理划分促进组件化开发
技术特性
-
支持多级嵌套(最多推荐3级)
-
同一个命名空间可分布在多个文件中
-
默认命名空间为全局命名空间(无命名空间声明时)
二 、命名空间的普通使用
先申明一个命名空间:
cs
// 声明命名空间
namespace School.Math
{
public class Calculator
{
public int Add(int a, int b) => a + b;
}
}
使用示例:其实在前面我们写的所有的代码都在命名空间中,大家早就不陌生了
cs
// 使用命名空间
using School.Math;
class Program
{
static void Main()
{
// 明确知道Calculator来自School.Math命名空间
var calc = new Calculator();
Console.WriteLine(calc.Add(2, 3)); // 输出5
}
}
三 、不同命名空间中相互使用 需要引用命名空间或指明出处
有可能在不同的命名空间,你有相同的类名,你想使用指定的命名空间中的内容,你就必须指定是哪个命名空间里面的。直接 命名空间.类名 对象名 new出来就可以使用了。
命名空间声明:
cs
// 文件:Physics/Mechanics.cs
namespace Physics.Mechanics
{
public class ForceCalculator
{
public double CalculateForce(double mass, double acceleration)
=> mass * acceleration;
}
}
// 文件:Math/Algebra.cs
namespace Math.Algebra
{
public class EquationSolver
{
public double SolveLinearEquation(double a, double b)
=> -b / a;
}
}
使用:
cs
// 主程序文件
class Program
{
static void Main()
{
// 显式类型声明 + 完全限定名
Physics.Mechanics.ForceCalculator forceCalculator =
new Physics.Mechanics.ForceCalculator();
Math.Algebra.EquationSolver equationSolver =
new Math.Algebra.EquationSolver();
double force = forceCalculator.CalculateForce(10, 9.8);
double solution = equationSolver.SolveLinearEquation(2, -4);
System.Console.WriteLine($"力:{force}N,方程解:{solution}");
}
}
不同命名空间中允许有同名类,在不同的命名空间中 是可以有同名类的
四、命名空间可以包裹命名空间(嵌套命名空间使用)
命名空间的声明:
cs
// 外层命名空间
namespace ECommerce
{
// 内层命名空间
namespace Payment
{
public class Processor
{
public void ProcessPayment(double amount)
=> Console.WriteLine($"处理支付:{amount}元");
}
}
}
// 等效简化写法
namespace ECommerce.Shipping
{
public class DeliveryService
{
public void ScheduleDelivery()
=> Console.WriteLine("安排配送");
}
}
使用示例:
cs
// 使用示例
using ECommerce.Payment;
using ECommerce.Shipping;
class OrderSystem
{
void ProcessOrder()
{
new Processor().ProcessPayment(199.9);
new DeliveryService().ScheduleDelivery();
}
}
五、 关于修饰类的访问修饰符
public ------ 命名空间中的类 默认为public
internal ------ 只能在该程序集中使用
abstract ------ 抽象类
sealed ------ 密封类
partial ------ 分部类