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

相关推荐
rannn_1112 小时前
【MySQL学习|黑马笔记|Day7】触发器和锁(全局锁、表级锁、行级锁、)
笔记·后端·学习·mysql
喜欢吃燃面3 小时前
C++算法竞赛:位运算
开发语言·c++·学习·算法
传奇开心果编程3 小时前
【传奇开心果系列】Flet框架实现的家庭记账本示例自定义模板
python·学习·ui·前端框架·自动化
唐青枫3 小时前
别滥用 Task.Run:C# 异步并发实操指南
c#·.net
_Kayo_9 小时前
node.js 学习笔记3 HTTP
笔记·学习
我好喜欢你~10 小时前
C#---StopWatch类
开发语言·c#
CCCC131016312 小时前
嵌入式学习(day 28)线程
jvm·学习
星星火柴93613 小时前
关于“双指针法“的总结
数据结构·c++·笔记·学习·算法
小狗爱吃黄桃罐头13 小时前
正点原子【第四期】Linux之驱动开发篇学习笔记-1.1 Linux驱动开发与裸机开发的区别
linux·驱动开发·学习
艾莉丝努力练剑14 小时前
【洛谷刷题】用C语言和C++做一些入门题,练习洛谷IDE模式:分支机构(一)
c语言·开发语言·数据结构·c++·学习·算法