C#核心学习(十五)面向对象--关联知识点(1)命名空间

目录

一、命名空间基本概念:代码的"虚拟文件夹"

[二 、命名空间的普通使用](#二 、命名空间的普通使用)

[三 、不同命名空间中相互使用 需要引用命名空间或指明出处](#三 、不同命名空间中相互使用 需要引用命名空间或指明出处)

四、命名空间可以包裹命名空间(嵌套命名空间使用)

[五、 关于修饰类的访问修饰符](#五、 关于修饰类的访问修饰符)


一、命名空间基本概念:代码的"虚拟文件夹"

定义与本质

命名空间(Namespace)是C#中用于组织和管理代码逻辑的核心机制。它本质上是一个逻辑容器,可以将类、结构、接口等类型进行分组管理,类似于操作系统的文件夹系统。但不同于物理文件夹,命名空间是纯粹的逻辑划分,与文件存储位置无关。就可以把他想成是一个工具包,装载着不同类的工具。

主要作用:

  1. 命名冲突防护:允许在不同命名空间中使用相同类型名

  2. 逻辑分组:将相关功能模块组织在一起(如数据访问层、业务逻辑层)

  3. 访问控制基础:与访问修饰符配合实现代码可见性管理

  4. 代码复用:通过合理划分促进组件化开发

技术特性

  • 支持多级嵌套(最多推荐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 ------ 分部类

相关推荐
蓝莓味柯基1 小时前
Python 学习路线与笔记跳转(持续更新笔记链接)
笔记·python·学习
wangnaisheng2 小时前
【C#】一个类中的接口方法使用static和不使用static的区别
c#
Rytter2 小时前
Android逆向学习(八)Xposed快速上手(上)
android·学习
Kx…………3 小时前
Day3:设置页面全局渐变线性渐变背景色uniapp壁纸实战
前端·学习·uni-app·实战·项目
程序猿多布3 小时前
C# 定时器实现
c#
等什么君!3 小时前
学习spring boot-拦截器Interceptor,过滤器Filter
java·spring boot·学习
大飞pkz4 小时前
【Unity】使用XLua进行热修复
unity·c#·游戏引擎·lua·游戏开发·xlua·lua热修复
chilling heart5 小时前
JAVA---继承
java·开发语言·学习
绿龙术士5 小时前
C#与西门子PLC通信:S7NetPlus和HslCommunication使用指南
开发语言·c#
o0向阳而生0o6 小时前
35、C# 中的反射(Reflection)
开发语言·c#·.net