当前位置: 首页 > news >正文

C# 命名空间(Namespace)

文章目录

  • 前言
  • 一、命名空间的定义与使用基础
    • (一)定义语法与规则
    • (二)调用命名空间内元素
  • 二、using 关键字
  • 三、嵌套命名空间


前言

  命名空间(Namespace)在于提供一种清晰、高效的方式,将一组名称与其他名称进行分隔,确保在不同命名空间里即便声明了相同名称的类,也不会引发冲突,恰似计算机系统里的文件夹架构,同一文件夹中严禁同名文件存在,可不同文件夹下的文件即便重名也相安无事。
在这里插入图片描述

一、命名空间的定义与使用基础

在这里插入图片描述

(一)定义语法与规则

  命名空间的定义遵循一套简洁且规范的语法,以关键字 namespace 作为起始标识,紧随其后的便是所设定的命名空间名称,在这个被划定的 “代码疆域” 内,开发者可以自由地放置各类代码声明,诸如类、接口、结构体等诸多代码元素。示例如下:

namespace MyCustomNamespace
{// 在这里可以声明类、结构体、接口等,比如下面定义一个简单的类class MyClass{public void SomeMethod(){Console.WriteLine("This is a method in MyClass within MyCustomNamespace");}}
}

  上述代码清晰勾勒出一个名为 MyCustomNamespace 的命名空间,内部承载着 MyClass 这一自定义类,后续随着项目推进,只要处于该命名空间下,相关代码便能有条不紊地对 MyClass 及其成员展开调用与操作。

(二)调用命名空间内元素

  当需要调用存在于特定命名空间里支持命名空间版本的函数或者变量时,就需将命名空间名称前置,借助 “.” 运算符构建清晰的访问路径,形如 namespace_name.item_name。以下面的程序为例,能直观洞察这一调用规则在实践中的运作方式:

using System;
namespace first_space
{class namespace_cl{public void func(){Console.WriteLine("Inside first_space");}}
}
namespace second_space
{class namespace_cl{public void func(){Console.WriteLine("Inside second_space");}}
}
class TestClass
{static void Main(string[] args){first_space.namespace_cl fc = new first_space.namespace_cl();second_space.namespace_cl sc = new second_space.namespace_cl();fc.func();sc.func();Console.ReadKey();}
}

  在这段代码里,first_space 和 second_space 是两个独立的命名空间,各自拥有名为 namespace_cl 的类,且均定义了 func 方法。在 Main 方法中,通过 first_space.namespace_cl 和 second_space.namespace_cl 这般精准的命名空间限定方式,分别实例化对应类并调用 func 方法,最终按预期输出各自空间内设定的信息,淋漓尽致展现出命名空间对同名类的隔离与区分成效,编译执行后依次呈现:

Inside first_space
Inside second_space

二、using 关键字

  在日常 C# 编程进程中,频繁书写冗长的完全限定名称(即将命名空间名称与具体元素名称完整罗列)无疑会增添代码书写负担、拉低编码效率,而 using 关键字恰似一把 “魔法棒”,巧妙化解了这一难题。它清晰表明程序正使用给定命名空间中的名称,赋予开发者便捷引用的 “特权”。
就像在使用广泛的 System 命名空间时,其内部定义了诸如 Console 这般常用类,借助 using System; 指令预先声明后,我们便能在代码里简洁写下 Console.WriteLine(“Hello there”);,省略繁琐的 System.Console.WriteLine(“Hello there”);。
  更进一步,using 命名空间指令更是允许开发者在后续代码使用相关名称时,省却前置的命名空间名称,只需提前告知编译器所使用的指定命名空间,后续便能 “轻装上阵”。以下面重写后的实例为证:

using System;
using first_space;
using second_space;namespace first_space
{class abc{public void func(){Console.WriteLine("Inside first_space");}}
}
namespace second_space
{class efg{public void func(){Console.WriteLine("Inside second_space");}}
}
class TestClass
{static void Main(string[] args){abc fc = new abc();efg sc = new efg();fc.func();sc.func();Console.ReadKey();}
}

  在此例中,通过 using first_space; 和 using second_space; 声明,在 Main 方法里可直接以 abc 和 efg 之名实例化对应类并调用方法,如同它们就在眼前触手可及,无需再添命名空间前缀,编译执行后同样输出:

Inside first_space
Inside second_space

  不过值得留意的是,过度滥用 using 指令可能导致命名空间 “污染”,引发潜在的名称混淆,因此在大型项目里,需审慎权衡、精准运用,力求在便捷与清晰间寻得平衡。

三、嵌套命名空间

  为契合复杂项目里愈发精细化的代码组织诉求,C# 允许命名空间相互嵌套,形成类似 “套娃” 般的层次化结构,开发者得以在一个命名空间内部再定义另一个命名空间,持续拓展代码管理的深度与广度。语法呈现如下:

namespace OuterNamespace
{// 外层命名空间的常规代码声明,比如类、接口等定义namespace InnerNamespace{// 内层命名空间专属代码声明,可与外层相互独立又有所关联}
}

  面对这类嵌套架构,访问嵌套命名空间的成员时,借助点(.)运算符便能层层穿透、精准定位。以下实例可供参考:

using System;
using SomeNameSpace;
using SomeNameSpace.Nested;namespace SomeNameSpace
{public class MyClass{static void Main(){Console.WriteLine("In SomeNameSpace");Nested.NestedNameSpaceClass.SayHello();}}// 内嵌命名空间namespace Nested{public class NestedNameSpaceClass{public static void SayHello(){Console.WriteLine("In Nested");}}}
}

  在这段代码里,SomeNameSpace 作为外层命名空间,嵌套了 Nested 这一内层命名空间,后者包含 NestedNameSpaceClass 类及其 SayHello 静态方法。在 SomeNameSpace 的 MyClass 的 Main 方法中,通过 Nested.NestedNameSpaceClass.SayHello() 这般调用链路,借助点运算符依次穿透两层命名空间,顺利触发内层方法执行,编译执行后输出:

In SomeNameSpace
In Nested

  这种嵌套式设计,在大型软件项目里,能依据功能模块、业务领域等维度对代码进行条理清晰的分组与归置,仿若为代码搭建起一座规整的 “大厦”,各 “楼层”(命名空间层级)各司其职、协同运作,让代码维护、团队协作更为高效顺畅。
在这里插入图片描述

相关文章:

C# 命名空间(Namespace)

文章目录 前言一、命名空间的定义与使用基础(一)定义语法与规则(二)调用命名空间内元素 二、using 关键字三、嵌套命名空间 前言 命名空间(Namespace)在于提供一种清晰、高效的方式,将一组名称与…...

几个Linux系统安装体验: centos7系统服务版

本文介绍CentOS7服务版本的安装。 前言 当前国产操作系统版本众多,但根据笔者多年的实践经验得到的认知,最好能抓住底层逻辑,上下打通打透,拉齐表现和本质,就能在纷扰版本中看得清清楚楚,明明白白&#xf…...

ViT学习笔记(一) 基本的原理和框架结构

原论文地址:https://arxiv.org/pdf/2010.11929 首先大致通读一下原论文,这是很有必要的,但不必完全读懂,因为会有高手给我们解读,比如: 【Transformer系列】深入浅出理解ViT(Vision Transformer)模型-CSD…...

fedora下Jetbrains系列IDE窗口中文乱码解决方法

可以看到窗口右部分的中文内容为小方块。 进入 Settings - Appearance & Behavior - Appearance - Use custom font : Note Sans Mono CJK SC ,设置后如下图:...

nginx根据报文里字段转发至不同地址

nginx接收到post请求.请求报文里是一个json字符串,字符串里有个字段id。 根据id不同,转发到不同地址。 如果idaaa,转发到www.aaa.com.test 如果idbbb,转发到www.bbb.com.test 如何配置,请提供一个nginx.conf 要在 Nginx 中根据 POST 请求的 JSON 负载中的…...

使用 html/css 实现 educoder 顶部导航栏的步骤和方法

要使用HTML和CSS实现一个类似于Educoder网站的顶部导航栏,我们可以设计一个响应式、简洁且功能齐全的导航栏。Educoder的顶部导航栏通常包括网站的logo、主要导航项(如首页、课程、讨论等)、以及用户操作按钮(如登录、注册等&…...

EasyExcel导出列表

通过easyexcel导出列表数据 根据列表内容自适应宽高。 文件名冲突&#xff0c;修改文件名递增设置。 依赖 <dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>${easyexcel.version}</version&…...

【unity小技巧】分享vscode如何开启unity断点调试模式,并进行unity断点调试(2024年最新的方法,实测有效)

文章目录 前言一、前置条件1、已安装Visual Studio Code&#xff0c;并且unity首选项>外部工具>外部脚本编辑器选择为Visual Studio Code [版本号]&#xff0c;2、在Visual Studio Code扩展中搜索Unity&#xff0c;并安装3、同时注意这个插件下面的描述&#xff0c;需要根…...

【JavaScript】Object.keys() 和 Object.values() 的使用示例和相关的简单应用

值是数字的情况&#xff1a; let n 124; Object.keys(n) // [] Object.values(n) // []值是字符串的情况&#xff1a; let s "abc"; Object.keys(s) // [0, 1, 2] Object.values(s) // [a, b, c]值是数组的情况&#xff1a;&#xff08;常用&#xff09; let ar…...

SwiftUI 列表(或 Form)子项中的 Picker 引起导航无法跳转的原因及解决

概述 在 SwiftUI 的界面布局中&#xff0c;列表&#xff08;List&#xff09;和 Form 是我们秃头码农们司空见惯的选择。不过大家是否知道&#xff1a;如果将 Picker 之类的视图嵌入到列表或 Form 的子项中会导致导航操作无法被触发。 从上图可以看到&#xff1a;当在 List 的…...

基于ZYNQ-7000系列的FPGA学习笔记8——呼吸灯

基于ZYNQ-7000系列的FPGA学习笔记8——呼吸灯 1. 实验要求2. 功能分析3. 模块设计4. 波形图5.代码编写6. 代码仿真7. 添加约束文件并分析综合 上期内容&#xff0c;我们学习了按键控制蜂鸣器&#xff0c;这一期我们开始学习呼吸灯 1. 实验要求 控制领航者核心板上的led&#x…...

探索 Python 应用的分层依赖:解决 UOS 环境中的 libvirt-python 安装问题

探索 Python 应用的分层依赖&#xff1a;解决 UOS 环境中的 libvirt-python 安装问题 背景Python 版本升级 问题描述原因分析与解决方案 Python 应用的分层依赖&#xff1a;安装与部署的视角libvirt-python的分层依赖尝试的解决方案 使用编译好的 .whl 文件"嫁接"整个…...

OpenCV-平滑图像

二维卷积(图像滤波) 与一维信号一样&#xff0c;图像也可以通过各种低通滤波器&#xff08;LPF&#xff09;、高通滤波器&#xff08;HPF&#xff09;等进行过滤。LPF 有助于消除噪音、模糊图像等。HPF 滤波器有助于在图像中找到边缘。 opencv 提供了函数 **cv.filter2D()**&…...

解决跨域问题方案

跨域问题在前后端分离架构下尤为常见&#xff0c;是每个 Web 开发者都会遇到的核心问题。本文将通过原理解析、场景剖析、解决方案详解以及最佳实践等多个维度&#xff0c;帮助开发者全面理解并有效应对跨域问题。 目录 **一、跨域的本质****1. 同源策略****2. 同源策略的限制范…...

云计算介绍_3(计算虚拟化——cpu虚拟化、内存虚拟化、io虚拟化、常见集群策略、华为FC)

计算虚拟化 1.计算虚拟化介绍1.1 计算虚拟化 分类&#xff08;cpu虚拟化、内存虚拟化、IO虚拟化&#xff09;1.2 cpu虚拟化1.3 内存虚拟化1.4 IO虚拟化1.5 常见的集群的策略1.6 华为FC 1.计算虚拟化介绍 1.1 计算虚拟化 分类&#xff08;cpu虚拟化、内存虚拟化、IO虚拟化&#…...

软件工程复习记录

基本概念 软件工程三要素&#xff1a;方法、工具、过程 软件开发方法&#xff1a;软件开发所遵循的办法和步骤&#xff0c;以保证所得到的运行系统和支持的文档满足质量要求。 软件开发过程管理 软件生命周期&#xff1a;可行性研究、需求分析、概要设计、详细设计、编码、测…...

俩Nim游戏

1.给定n堆石子&#xff0c;每堆石子有xi快&#xff0c;两位玩家轮流操作&#xff0c;每次操作可以从任意一堆石子中拿走任意数量的石子&#xff08;可以拿完&#xff0c;但不能不拿&#xff09;&#xff0c;最后无法进行操作的人视为失败。 问如果两人都采用最优策略&#xff…...

基于超级电容和电池的新能源汽车能量管理系统simulink建模与仿真

目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 4.系统原理简介 4.1 超级电容特性 4.2 电池特性 5.完整工程文件 1.课题概述 基于超级电容和电池的新能源汽车能量管理系统simulink建模与仿真。分析不同车速对应的电池&#xff0c;超级电容充放电变化情况。 2.系统仿…...

数据结构——图(遍历,最小生成树,最短路径)

目录 一.图的基本概念 二.图的存储结构 1.邻接矩阵 2.邻接表 三.图的遍历 1.图的广度优先遍历 2.图的深度优先遍历 四.最小生成树 1.Kruskal算法 2.Prim算法 五.最短路径 1.单源最短路径--Dijkstra算法 2.单源最短路径--Bellman-Ford算法 3.多源最短路径--Floyd-…...

002-NoSQL介绍

目录 一、NoSQL 简介 二、NoSQL 特性 三、NoSQL 的工作原理 四、NoSQL 有哪些类型 五、NoSQL数据库与关系型数据库的区别 六、常见的非关系型数据库NOSQL分类 一、NoSQL 简介 NoSQL,全称为Not Only SQL,指的是非关系型的数据库。NoSQL有时也称作Not Only SQL的缩写,是…...

qt-everywher交叉编译e-src-5.15.2

简化配置的方式&#xff1a; 你完全可以通过直接配置 安装目录、编译链 和 目标架构 来完成交叉编译&#xff0c;而不需要修改 mkspecs 配置。以下是如何通过简化配置来进行交叉编译 Qt 的步骤。 准备交叉编译工具链 首先&#xff0c;确保你已经安装了交叉编译工具链&#xff…...

4.STM32通信接口之SPI通信(含源码)---硬件SPI与W25Q64存储模块通信实战《精讲》

开胃简介 根据上一节对STM32的SPI介绍&#xff01;本节将进行硬件SPI的实现&#xff0c;片选用软件实现&#xff01;跟着Whappy走起&#xff01;W25Q64的驱动层&#xff0c;我们不需要更改&#xff0c;仅仅需要更改一下SPI的协议&#xff0c;即&#xff1a;由软件实现改成硬件…...

生信技能63 - 构建gnomAD变异位点的SQLite查询数据库

将数据量巨大的gnomAD数据库,通过SQLite数据库寻找gnomAD中存在的各种变异注释信息(如等位基因计数,深度,次要等位基因频率等),查询300.000个变量的查询需要大约40秒,通过染色体编号+位置+REF+ALT即可进行快速查询。 1. gnomAD变异注释VCF文件字段 gnomAD VCF各版本包…...

0x0118消息 WM_SYSTIMER

0x0118消息就是WM_SYSTIMER 编辑框出现输入光标时,产生的消息. 0x0118 would be the undocumented WM_SYSTIMER, which appears to be used for caret blinks. 0x0118是一个undocument 消息&#xff0c; 微软没有记录。 但在一些库的源码中可以看到&#xff0c;比如ATL的库文…...

【机器学习】机器学习的基本分类-无监督学习(Unsupervised Learning)

无监督学习&#xff08;Unsupervised Learning&#xff09; 无监督学习是一种机器学习方法&#xff0c;主要用于没有标签的数据集。其目标是从数据中挖掘出潜在的结构和模式。常见的无监督学习任务包括 聚类、降维、密度估计 和 异常检测。 1. 无监督学习的核心目标 1.1 聚类…...

[代码随想录09]字符串2的总结

前言 处理字符串主要是有思路&#xff0c;同时总结方法。 题目链接 151. 反转字符串中的单词 - 力扣&#xff08;LeetCode&#xff09; 55. 右旋字符串&#xff08;第八期模拟笔试&#xff09; 一、翻转字符串里的单词 这个题目的主要思路&#xff0c;代码采用从后往前遍历字…...

java注解(一):什么是注解?什么是元注解?如何自定义注解?注解的原理是什么?

目录 1、什么是注解&#xff1f; 2、什么是元注解 1、Target() 2、Retention() 3、Documented 4、Inherited 3、如何自定义注解以解使用 4、注解的原理 本篇文章主要是介绍注解的概念、原理&#xff0c;以及通过代码演示4种元注解、如何自定义注解。通过反编译的形式进…...

AD20 原理图库更新到原理图

一 点击工具&#xff0c;从库更新。快捷键TL 二 点击完成 三 执行变更&#xff0c;最后点击关闭...

.NET用C#导入Excel数据到数据库

将Excel文件中的数据导入到数据库中不仅能够提升数据处理的效率和准确性&#xff0c;还能极大地促进数据分析和决策制定的过程。尤其在企业级应用中&#xff0c;Excel作为数据输入和初步整理的工具非常普遍&#xff0c;但其功能对于复杂查询、大规模数据管理和跨部门的数据共享…...

小身躯大能量-供热系统通过EtherCAT转Profinet网关进行升级

在现代工业自动化领域&#xff0c;通信技术的进步对于提高系统效率、稳定性和可靠性起着至关重要的作用。EtherCAT&#xff08;Ethernet for Control Automation Technology&#xff09;作为一种实时以太网解决方案&#xff0c;因其高性能及成本效益高等特点&#xff0c;在众多…...