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

相关推荐
知识分享小能手4 小时前
React学习教程,从入门到精通,React 单元测试:语法知识点及使用方法详解(30)
前端·javascript·vue.js·学习·react.js·单元测试·前端框架
rzjslSe7 小时前
【JavaGuide学习笔记】理解并发(Concurrency)与并行(Parallelism)的区别
java·笔记·学习
Cherry Zack7 小时前
了解Django模型,从基础到实战
python·学习·django
茯苓gao7 小时前
CAN总线学习(四)错误处理 STM32CAN外设一
网络·笔记·stm32·单片机·学习
虚行8 小时前
C#上位机 通过ProfitNet连接西门子PLC教程--系统模拟环境搭建
学习·c#·plc
jun~9 小时前
SQLMap数据库枚举靶机(打靶记录)
linux·数据库·笔记·学习·安全·web安全
月盈缺9 小时前
学习嵌入式的第四十二天——ARM——UART
arm开发·学习
雪域迷影9 小时前
C++/C#游戏开发引擎和2D/3D图形库
c++·3d·c#
Knight_AL10 小时前
LoadBalancer完整学习笔记:简介、原理与自定义
笔记·学习
友善啊,朋友10 小时前
《普通逻辑》学习记录——类比推理
学习·逻辑学