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 ------ 分部类

相关推荐
胖纸不争10 分钟前
嫌桌面 Agent 太重,我“自己”写了一个
ai·c#·net core
AOI小白新手上路1 小时前
DRSformer·论文蒸馏笔记:可学习 Top-k 稀疏注意力去雨网络
网络·笔记·学习
m4Rk_2 小时前
【论文阅读】Agent 记忆机制(96):M3-Agent——让 Agent 从视听经历中持续形成情景与语义长期记忆
论文阅读·人工智能·学习·开源·github
~光~~4 小时前
【嵌入式linux学习】Cache 策略:Write-Through / Write-Back + Allocation
linux·学习·spring
当青春邂逅吉米多维奇4 小时前
C#图解教程(第5版) 同步方法
开发语言·c#
波力海苔夹心脆6754 小时前
C# 机器视觉实战:单相机引导机械手精准贴合,从拍照、偏差计算(平移+旋转)到坐标补偿全解
开发语言·经验分享·数码相机·c#·视觉检测·.net
星恒随风5 小时前
Linux基础IO万字详解:从文件描述符fd到重定向、FILE缓冲机制及MiniShell升级
linux·运维·笔记·学习·状态模式
小雪崩5 小时前
嵌入式学习 day65:Linux驱动进阶——pinctrl 子系统和 platform 驱动框架
linux·学习·驱动
shixiexunnie5 小时前
Raw NAND 驱动库学习
驱动开发·学习
喜欢打篮球的普通人6 小时前
MiniMind 学习笔记(二十二):数学 Cookbook——把概率空间、期望、似然一次讲明白
人工智能·笔记·学习