首页 > 编程语言 >C#教程 - 命名空间(Namespace)

C#教程 - 命名空间(Namespace)

时间:2022-09-21 08:46:13浏览次数:79  
标签:教程 C# global Namespace System 空间 指令 命名 using

更新记录
转载请注明出处:
2022年9月21日 发布。
2022年9月10日 从笔记迁移到博客。

命名空间(Namespace)说明

一串字符串,解决代码标识符命名重复问题

作用:减少命名冲突、增强可读、可维护性
image

注意:一个源代码文件(.cs)可以包含任意多个命名空间,并且可以嵌套

命名空间也可以分布在多个源文件(.cs)中,最后编译成一个程序集
image

命名空间还可以编译到多个程序集中:
image

定义命名空间

定义命名空间可以有两种格式: 原文嵌套 和 分离的声明

原文嵌套:即直接在命名空间内再声明命名空间
image

分离的声明:不用在命名空间内部再进行声明命名空间,直接在外部一样完成嵌套

注意:子命名空间必须使用全路径
image

注意:

​ 虽然嵌套命名空间位于父命名空间内部,但是其成员并不属于包裹的父命名空间,常见的思维错误就是认为嵌套的命名空间在父命名空间内部,所以其成员也是父命名空间的子集,这是错误的,命名空间之间时相互独立的

​ 命名空间和程序集是完全独立的,命名空间最终被编译为完全限定名称

文件范围的命名空间声明(C#10)

类似于PHP的命名空间声明。

namespace Panda.Admin;
//其他代码

命名空间规范/最佳实践

Pascal风格

公司名.产品名.模块名

EG:

//某产品命名空间
PandaCompany.PandaProduct.ModuleName
//通用工具包命名空间
PandaCompany.Util.ToolName

CONSIDER creating a folder structure that matches the namespace hierarchy

引入命名空间

使用完全限定名也是可以的,但是非常的冗长,可以使用using指令引入,分别是:

using 命名空间引入指令
using 别名指令

注意:

​ using指令必须放在源文件的顶部,在任何声明之前

​ using指令必须放在源文件的最外层,即不是命名空间内

using命名空间引入指令

当编译器遇到一个不在当前命名空间的名称时,会检查using命名空间指令中给出的命名空间列表,并把该命名空间加到该名称前

语法:
image

EG:

using System;
using System.Data;
using System.IO;

using别名指令

using别名指令允许给命名空间、命名空间内的一个类型 别名

定义:
image

使用:
image

EG:

using Console = System.Console;

using引入静态成员

说明:using static可以直接将静态成员直接引入到作用域中

语法:

using static 静态类名;

实例:

using static System.Console;

namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            int panda = 0b010100101;
            int panda2 = 0b0101_0101_0101;

            WriteLine(panda);
            WriteLine(panda2);

            ReadKey();
        }
    }
}

使用最外层命名空间(全局命名空间)

如果需要访问全局命名空间可以使用global::修饰符

使用:global::关键字即可

实例:

global::System.String test = new global::System.String("abc");

实例:

global::System.Nullable<int> u = null;
global::System.Text.StringBuilder sb;

更改默认的命名空间

新建一个项目或者新建一个文件时,默认的命名空间是项目名

可以使用属性窗口改变默认命名空间
image

程序集/命名空间/类的区别和联系

程序集可以包含多个命名空间,命名空间也可以放在多个程序集中

命名空间可以包含多个类

本质都是封装代码的一种方式
image

程序集命名空间冲突

如果A程序集和B程序集存在命名空间冲突

Library 1, compiled to Widgets1.dll:

namespace Widgets
{
  public class Widget {}
}

Library 2, compiled to Widgets2.dll:

namespace Widgets
{
  public class Widget {}
}

modify the application’s .csproj file:

<ItemGroup>
  <Reference Include="Widgets1">
    <Aliases>W1</Aliases>
  </Reference>
  <Reference Include="Widgets2">
    <Aliases>W2</Aliases>
  </Reference>
</ItemGroup>

use the extern alias directive:

extern alias W1;
extern alias W2;

class Test
{
  static void Main()
  {
    W1.Widgets.Widget w1 = new W1.Widgets.Widget();
    W2.Widgets.Widget w2 = new W2.Widgets.Widget();
  }
}

.NET中常见命名空间

using System;   //内建数据类型、数学计算、环境变量、垃圾回收、常见异常、特性
using System.Collections;           //集合容器
using System.Collections.Generic;   //泛型集合容器
using System.Data;                  //数据库
using System.Data.Common;
using System.Data.SqlClient;
using System.IO;                    //文件IO、压缩、串口
using System.IO.Compression;
using System.IO.Ports;
using System.Reflection;            //反射
using System.Reflection.Emit;
using System.Runtime.InteropServices;
using System.Drawing;               //对 GDI+ 基本图形功能
using System.Windows.Forms;         //windows forms
using System.Windows;               //WPF
using System.Windows.Control;
using System.Windows.Shapes;
using System.Linq;                  //LINQ
using System.Xml.Linq;
using System.Web;                   //ASP.NET
using System.ServiceModel;          //WCF
using System.Workflow;              //WWF工作流
using System.Threading;             //线程
using System.Security;              //安全
using System.Xml;                   //XML

标签:教程,C#,global,Namespace,System,空间,指令,命名,using
From: https://www.cnblogs.com/cqpanda/p/16712668.html

相关文章

  • 实验2:Open vSwitch虚拟交换机实践
    (一)基本要求a)/home/用户名/学号/lab2/目录下执行ovs-vsctlshow命令、以及p0和p1连通性测试的执行结果截图;b)/home/用户名/学号/lab2/目录下开启MininetCLI并执行pi......
  • CF 821
    B:n个人比赛,比赛规则,1,2比赛,胜者与3比赛,再胜者与4比赛,一次类推,最后得到冠军。故必定进行n-1次比赛,游戏结束。现在给定x,y,表示对于其中任何一个人,此人赢了x场或输了y场,问......
  • dotnet 为大型应用接入 ApplicationStartupManager 启动流程框架
    对于大型的应用软件,特别是客户端应用软件,应用启动过程中,需要执行大量的逻辑,包括各个模块的初始化和注册等等逻辑。大型应用软件的启动过程都是非常复杂的,而客户端应用软件......
  • CSS 网格 Gird 布局
    CSS网格Gird布局创建网格Gird通过将属性display的值设为grid,HTML元素就可以变为网格容器。注意:在CSS网格中,父元素称为容器(container),它的子元素称为项(items)。......
  • ES6对Number数字以及Object对象类型做的升级优化
    1.ES6对Number数字做的升级优化优化部分ES6在Number原型上新增了isFinite()、isNaN()方法,用来取代ES5中的isFinite()、isNaN()方法检测数值是否有限,是否是NaN。//ES5c......
  • css-flexbox
    在缩放整个页面的时候,里面的元素可以随着页面缩放而变化设置display属性为flex就可以了display:flex;  决定容器中的主轴方向用flex-directionex:flex-direction......
  • [Note]CF 题乱做
    CF161CAbracadabra*2400.分治,每次有\(4\)种情况:左左,左右,右右,右左(相对于当前对称轴)。复杂度看似是\(O(n^2)\)的,但是我们可以用以个剪枝将其优化到\(O(\logn)\):如......
  • PyQt完整入门教程
    PyQt完整入门教程https://blog.csdn.net/baidu_37503452?spm=1000.2115.3001.53431、GUI开发框架简介19年来,一直在做AndroidROM相关测试,也有了一定的积累;20年......
  • 使用CustomRequestMappingHandlerMapping自定义统一处理前后端接口不一致问题
    springmvc或springboot使用RequestMappingHandlerMapping自定义统一处理前后端接口不一致问题本文地址:https://www.cnblogs.com/muphy/p/16714292.html场景以前老项......
  • 使用GDB(CGDB,DDD,Code::Blocks)调试C语言程序
    目录使用GDB(CGDB,DDD,Code::Blocks)调试C语言程序学习建议:LinuxBash下打开三个标签页调试基础递归的学习举一反三dddcode::blocks特别感谢参考资料使用GDB(CGDB,DDD,Cod......