当前位置: 首页 > 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的缩写,是…...

装饰模式(Decorator Pattern)重构java邮件发奖系统实战

前言 现在我们有个如下的需求&#xff0c;设计一个邮件发奖的小系统&#xff0c; 需求 1.数据验证 → 2. 敏感信息加密 → 3. 日志记录 → 4. 实际发送邮件 装饰器模式&#xff08;Decorator Pattern&#xff09;允许向一个现有的对象添加新的功能&#xff0c;同时又不改变其…...

ubuntu搭建nfs服务centos挂载访问

在Ubuntu上设置NFS服务器 在Ubuntu上&#xff0c;你可以使用apt包管理器来安装NFS服务器。打开终端并运行&#xff1a; sudo apt update sudo apt install nfs-kernel-server创建共享目录 创建一个目录用于共享&#xff0c;例如/shared&#xff1a; sudo mkdir /shared sud…...

Qt/C++开发监控GB28181系统/取流协议/同时支持udp/tcp被动/tcp主动

一、前言说明 在2011版本的gb28181协议中&#xff0c;拉取视频流只要求udp方式&#xff0c;从2016开始要求新增支持tcp被动和tcp主动两种方式&#xff0c;udp理论上会丢包的&#xff0c;所以实际使用过程可能会出现画面花屏的情况&#xff0c;而tcp肯定不丢包&#xff0c;起码…...

C++:std::is_convertible

C++标志库中提供is_convertible,可以测试一种类型是否可以转换为另一只类型: template <class From, class To> struct is_convertible; 使用举例: #include <iostream> #include <string>using namespace std;struct A { }; struct B : A { };int main…...

Java如何权衡是使用无序的数组还是有序的数组

在 Java 中,选择有序数组还是无序数组取决于具体场景的性能需求与操作特点。以下是关键权衡因素及决策指南: ⚖️ 核心权衡维度 维度有序数组无序数组查询性能二分查找 O(log n) ✅线性扫描 O(n) ❌插入/删除需移位维护顺序 O(n) ❌直接操作尾部 O(1) ✅内存开销与无序数组相…...

基于Flask实现的医疗保险欺诈识别监测模型

基于Flask实现的医疗保险欺诈识别监测模型 项目截图 项目简介 社会医疗保险是国家通过立法形式强制实施&#xff0c;由雇主和个人按一定比例缴纳保险费&#xff0c;建立社会医疗保险基金&#xff0c;支付雇员医疗费用的一种医疗保险制度&#xff0c; 它是促进社会文明和进步的…...

YSYX学习记录(八)

C语言&#xff0c;练习0&#xff1a; 先创建一个文件夹&#xff0c;我用的是物理机&#xff1a; 安装build-essential 练习1&#xff1a; 我注释掉了 #include <stdio.h> 出现下面错误 在你的文本编辑器中打开ex1文件&#xff0c;随机修改或删除一部分&#xff0c;之后…...

电脑插入多块移动硬盘后经常出现卡顿和蓝屏

当电脑在插入多块移动硬盘后频繁出现卡顿和蓝屏问题时&#xff0c;可能涉及硬件资源冲突、驱动兼容性、供电不足或系统设置等多方面原因。以下是逐步排查和解决方案&#xff1a; 1. 检查电源供电问题 问题原因&#xff1a;多块移动硬盘同时运行可能导致USB接口供电不足&#x…...

稳定币的深度剖析与展望

一、引言 在当今数字化浪潮席卷全球的时代&#xff0c;加密货币作为一种新兴的金融现象&#xff0c;正以前所未有的速度改变着我们对传统货币和金融体系的认知。然而&#xff0c;加密货币市场的高度波动性却成为了其广泛应用和普及的一大障碍。在这样的背景下&#xff0c;稳定…...

初学 pytest 记录

安装 pip install pytest用例可以是函数也可以是类中的方法 def test_func():print()class TestAdd: # def __init__(self): 在 pytest 中不可以使用__init__方法 # self.cc 12345 pytest.mark.api def test_str(self):res add(1, 2)assert res 12def test_int(self):r…...