C#教程 - 命名空间(Namespace)
更新记录
转载请注明出处:
2022年9月21日 发布。
2022年9月10日 从笔记迁移到博客。
命名空间(Namespace)说明
一串字符串,解决代码标识符命名重复问题
作用:减少命名冲突、增强可读、可维护性
注意:一个源代码文件(.cs)可以包含任意多个命名空间,并且可以嵌套
命名空间也可以分布在多个源文件(.cs)中,最后编译成一个程序集
命名空间还可以编译到多个程序集中:
定义命名空间
定义命名空间可以有两种格式: 原文嵌套 和 分离的声明
原文嵌套:即直接在命名空间内再声明命名空间
分离的声明:不用在命名空间内部再进行声明命名空间,直接在外部一样完成嵌套
注意:子命名空间必须使用全路径
注意:
虽然嵌套命名空间位于父命名空间内部,但是其成员并不属于包裹的父命名空间,常见的思维错误就是认为嵌套的命名空间在父命名空间内部,所以其成员也是父命名空间的子集,这是错误的,命名空间之间时相互独立的
命名空间和程序集是完全独立的,命名空间最终被编译为完全限定名称
文件范围的命名空间声明(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命名空间指令中给出的命名空间列表,并把该命名空间加到该名称前
语法:
EG:
using System;
using System.Data;
using System.IO;
using别名指令
using别名指令允许给命名空间、命名空间内的一个类型 别名
定义:
使用:
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;
更改默认的命名空间
新建一个项目或者新建一个文件时,默认的命名空间是项目名
可以使用属性窗口改变默认命名空间
程序集/命名空间/类的区别和联系
程序集可以包含多个命名空间,命名空间也可以放在多个程序集中
命名空间可以包含多个类
本质都是封装代码的一种方式
程序集命名空间冲突
如果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
本文来自博客园,作者:重庆熊猫,转载请注明原文链接:https://www.cnblogs.com/cqpanda/p/16712668.html