重庆熊猫 Loading

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

更新记录
转载请注明出处:
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
posted @ 2022-09-21 08:32  重庆熊猫  阅读(3221)  评论(0编辑  收藏  举报