C# 图解教程 第5版 —— 第22章 命名空间和程序集

这篇具有很好参考价值的文章主要介绍了C# 图解教程 第5版 —— 第22章 命名空间和程序集。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

22.1 引用其他程序集

​ 在许多项目中,会使用其他程序集的类或类型,而不仅仅是自己声明的。这些程序集(称为类库)可能来自 BCL 或第三方供应商,也可以是自己创建的。通常这些程序集文件的名称以 .dll 扩展名结尾,而不是 .exe。

C# 图解教程 第5版 —— 第22章 命名空间和程序集,C# 图解教程 第5版,c#,开发语言,职场和发展C# 图解教程 第5版 —— 第22章 命名空间和程序集,C# 图解教程 第5版,c#,开发语言,职场和发展
图22.1 SuperLib 源代码和结果程序集

​ 假设还要写一个名为 MyWidgets 的程序,而且想使用 SquareWidget 类。在代码中没有声明类 SquareWidget,使用的是定义在 SuperLib 中的类。在编译程序时,需要给编译器添加该引用。

C# 图解教程 第5版 —— 第22章 命名空间和程序集,C# 图解教程 第5版,c#,开发语言,职场和发展

​ 在 Rider 中,右键项目,选择“添加” -> “引用”,选择下方的“添加自”按钮,找到对应的程序集即可。

C# 图解教程 第5版 —— 第22章 命名空间和程序集,C# 图解教程 第5版,c#,开发语言,职场和发展C# 图解教程 第5版 —— 第22章 命名空间和程序集,C# 图解教程 第5版,c#,开发语言,职场和发展
图22.2 Rider 中添加程序集

​ 添加引用后,即可编译 MyWidgets。

C# 图解教程 第5版 —— 第22章 命名空间和程序集,C# 图解教程 第5版,c#,开发语言,职场和发展
图22.3 引用另一个程序集

mscorlib 库

​ 有一个类库,几乎先前的每个示例中都使用了它,即包含 Console 类的类库。该类库被定义在 mscorlib 程序集中的 mscorlib.dll 文件里。mscorlib 包含 C# 类型及大部分 .NET 语言基本类型的定义,在编译时,它必须被引用,因此不显示放在引用目录中。

​ 因此,算上 mscorlib,图 22.3 的过程看起来更像是图 22.4 描述的那样。

C# 图解教程 第5版 —— 第22章 命名空间和程序集,C# 图解教程 第5版,c#,开发语言,职场和发展
图22.4 引用类库

潜在的问题

​ 若想扩展上述类的能力,使用名为 CircleWidget 的类,并将其定义在 UltraLib 的程序集中。MyWidgets 的源代码如下,创建一个 SquareWidget 对象和一个 CircleWidget 对象,分别定义在 SuperLib 和 UltraLib 中。

C# 图解教程 第5版 —— 第22章 命名空间和程序集,C# 图解教程 第5版,c#,开发语言,职场和发展

​ 类库 UltraLib 的源代码如下所示,并将 UltraLib 编译成 dll,加入到项目引用列表中。注意,除了 CircleWidget 类外,还声明了一个名为 SquareWidget 的类。

C# 图解教程 第5版 —— 第22章 命名空间和程序集,C# 图解教程 第5版,c#,开发语言,职场和发展

​ 由于两个库都含有名为 SquareWidget 的类,编译时会产生错误信息,因为编译器不知道使用 SquareWidget 类的哪个版本。

C# 图解教程 第5版 —— 第22章 命名空间和程序集,C# 图解教程 第5版,c#,开发语言,职场和发展
图22.5 由于程序集 SuperLib 和 UltraLib 都含有名为 SquareWidget 的类声明,编译器不知道该实例化哪一个

22.2 命名空间

  • 命名空间可视为一个字符串,加在类名或类型名前面,通过点分隔。
  • 命名空间名、分隔点、类名三者共同组成类的完全限定名
  • 命名空间是共享命名空间名的一组类和类型。
C# 图解教程 第5版 —— 第22章 命名空间和程序集,C# 图解教程 第5版,c#,开发语言,职场和发展
图22.6 命名空间是共享同一命名空间名的一组类型定义

​ 使用命名空间将一组类型组织在一起并命名。

C# 图解教程 第5版 —— 第22章 命名空间和程序集,C# 图解教程 第5版,c#,开发语言,职场和发展

​ 例如,创建 MyCorp.SuperLib 命名空间并在其中声明 SquareWidget 类。

C# 图解教程 第5版 —— 第22章 命名空间和程序集,C# 图解教程 第5版,c#,开发语言,职场和发展

​ 当 MyCorp 公司提供更新的程序集时,可以按照如下方式修改。

C# 图解教程 第5版 —— 第22章 命名空间和程序集,C# 图解教程 第5版,c#,开发语言,职场和发展

​ 如果 UltraLib 程序集也被使用,那么编译过程下。

C# 图解教程 第5版 —— 第22章 命名空间和程序集,C# 图解教程 第5版,c#,开发语言,职场和发展
图22.7 带命名空间的类库

22.2.1 命名空间名称

  • 命名空间名称可以是任何有效标识符,区分大小写。
  • 命名空间名称可以包含任意数量的句点符号,用于将层次化组织类型。
表22.1 来自 BCL 的命名空间示例
C# 图解教程 第5版 —— 第22章 命名空间和程序集,C# 图解教程 第5版,c#,开发语言,职场和发展

​ 使用命名空间要点如下:

  1. 以公司名称开头。
  2. 在公司名之后跟着技术名称。
  3. 不要与类或类型名称相同。

22.2.2 命名空间的补充

  • 命名空间内,每个类型名必须有别于所有其他类型。
  • 命名空间内的类型称为命名空间的成员。
  • 源文件可以包含任意树木的命名空间声明,可以顺序也可以嵌套。
C# 图解教程 第5版 —— 第22章 命名空间和程序集,C# 图解教程 第5版,c#,开发语言,职场和发展
图22.8 一个源文件中的多个命名空间

22.2.3 命名空间跨文件伸展

​ 命名空间是非封闭的,可以在源文件后面或其他源文件中使用。

C# 图解教程 第5版 —— 第22章 命名空间和程序集,C# 图解教程 第5版,c#,开发语言,职场和发展C# 图解教程 第5版 —— 第22章 命名空间和程序集,C# 图解教程 第5版,c#,开发语言,职场和发展
图22.9 命名空间可以跨源文件并编译成单个程序集

22.2.4 嵌套命名空间

  1. 文本嵌套

    将命名空间的声明放在一个命名空间声明体内部。

  2. 分离的声明

    为嵌套命名空间创建单独的声明,但必须在声明中使用完全限定名。

C# 图解教程 第5版 —— 第22章 命名空间和程序集,C# 图解教程 第5版,c#,开发语言,职场和发展C# 图解教程 第5版 —— 第22章 命名空间和程序集,C# 图解教程 第5版,c#,开发语言,职场和发展
图22.10 声明嵌套命名空间的两种形式是等价的

22.3 using 指令

​ using 指令包含 2 大作用:

  1. using 命名空间指令。
  2. using 别名指令。

​ 关于 using 指令的要点如下:

  • 必须放在源文件的顶端,在任何类型声明之前。
  • 应用于当前源文件中的所有命名空间。

22.3.1 using 命名空间指令

​ 通过在源文件顶端放置 using 命名空间指令以避免使用长名称。

C# 图解教程 第5版 —— 第22章 命名空间和程序集,C# 图解教程 第5版,c#,开发语言,职场和发展

​ 下面的代码使用 using 命名空间指令来描述该代码来自 System 命名空间的类或其他类型。

C# 图解教程 第5版 —— 第22章 命名空间和程序集,C# 图解教程 第5版,c#,开发语言,职场和发展

22.3.2 using 别名指令

C# 图解教程 第5版 —— 第22章 命名空间和程序集,C# 图解教程 第5版,c#,开发语言,职场和发展

​ using 别名指令允许起一个别名给:

  1. 命名空间。
  2. 命名空间捏的一个类型。
C# 图解教程 第5版 —— 第22章 命名空间和程序集,C# 图解教程 第5版,c#,开发语言,职场和发展
  • 前两行告诉编译器,Syst 是 命名空间 System 的别名,SC 是类 System.Consle 的别名。
  • Main 的第一条语句使用命名空间 System 的别名,第二条语句使用完全限定名,第三条语句使用类的别名。

22.3.3 using static 指令

​ 使用 using static 指令引用给定命名空间中的特定类、结构体或枚举,以不带任何前缀地进行访问。

C# 图解教程 第5版 —— 第22章 命名空间和程序集,C# 图解教程 第5版,c#,开发语言,职场和发展

​ using static 指令指定的类本身可以不是静态的,类中非静态类型成员不会被 using static 指令导入。

22.4 程序集的结构

​ 程序集本身不包含本地机器代码,而是包含公共中间语言代码。此外,还包含即时编译器(JIT),在运行时将 CIL 转换为本机代码所需要的一切信息。程序集的文件扩展名通常为 .exe 或 .dll。

单文件程序集

​ 大部分程序集由一个单独的文件构成:

  1. 程序集清单。

    • 程序集标识符。
    • 组成程序集的文件列表。
    • 一个指示程序集中内容在哪里的地图。
    • 关于引用的其他程序集的信息。
  2. 类型元数据。

    包含程序集中定义的所有类型的信息。

  3. CIL 中间代码。

  4. 资源部分。

    该部分可选。可以包含图形或语言资源。

C# 图解教程 第5版 —— 第22章 命名空间和程序集,C# 图解教程 第5版,c#,开发语言,职场和发展
图22.11 单文件程序集的结构

多文件程序集

​ 程序集代码文件称为模块。尽管大部分程序集由单个文件构成,但有些程序集含有多个文件。对于有多个模块的程序集,一个文件是主模块,其他为次要模块。

  • 主模块含有程序集的清单和次要模块的引用。
  • 次要模块的文件名以扩展名 .netmodule 结尾。
  • 多文件程序集被视为一个单元,一起部署并一起定版。
C# 图解教程 第5版 —— 第22章 命名空间和程序集,C# 图解教程 第5版,c#,开发语言,职场和发展
图22.12 多文件程序集

22.5 程序集标识符

​ 在 .NET 框架中,程序集的文件名相对不重要,更重要的是程序集的标识符,其包含 4 个组成部分:

  1. 简单名称。

    不带文件扩展名的文件名,也称为程序集名友好名称

  2. 版本号。

    形式为 MajorVersion.MinorVersion.Build.Revision,例如:2.0.35.9。

  3. 文化信息。

    一个由 2 ~ 5 个字符组成的字符串,代表一种语言、国家或地区。例如,没过使用的英语文化名是 en-US,德国使用的德语文化是de-DE。

  4. 公钥。

    由程序集公司生产的唯一字符串(128 字节)。文章来源地址https://www.toymoban.com/news/detail-800381.html

C# 图解教程 第5版 —— 第22章 命名空间和程序集,C# 图解教程 第5版,c#,开发语言,职场和发展
图22.13 清单中程序集标识符的组成部分
C# 图解教程 第5版 —— 第22章 命名空间和程序集,C# 图解教程 第5版,c#,开发语言,职场和发展
图22.14 关于程序集标识符的术语

22.6 强命名程序集(*)

22.7 私有程序集的部署(*)

22.8 共享程序集和 GAC(*)

22.9 配置文件(*)

22.10 延迟签名(*)

到了这里,关于C# 图解教程 第5版 —— 第22章 命名空间和程序集的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • [Unity命名空间教程]介绍Unity新自带的命名空间UnityEngine.Pool

      大家都知道在一些游戏中常常要创建大量的游戏对象,如果这些对象长期占用一些内存而没有触发垃圾回收机制(以下简称GC)或者过于频繁的触发GC就会导致游戏的帧数暴跌,在移动设备直接造成卡死的现象,那引用对象池的概念,能让这些游戏对象在刚开始的时候就被初

    2023年04月11日
    浏览(34)
  • unity的C#学习——命名空间的定义与访问、using语句的常见用法

    在C#中,命名空间(Namespace)是一种 将类和其他相关类型组织在一起的方式 。可以将命名空间看作是一个容器,用于管理和组织类和其他类型。通过将相关的类型组织在一起,可以使代码更加清晰和易于维护。 命名空间的主要目的是为了避免名称冲突,使得开发人员可以 使

    2024年02月11日
    浏览(42)
  • 【C#】【命名空间(namespace)】.NET6.0后支持的顶级语句使用问题

    创建C#项目且使用.Net6.0以上的版本时,默认code会使用顶级语句形式: 1、略去static void Main(String[ ] args)主方法入口; 2、隐式使用(即隐藏且根据代码所需要的类自动调用)其他命名空间(包括): using System; using System.IO; using System.Collections.Generic; using System.Linq; using System.Net

    2024年02月08日
    浏览(36)
  • 命名空间“Microsoft”中不存在类型或命名空间名“office”(是否缺少程序集引用?)

    生成软件的时候提示office报错 项目-引用-右击添加引用-选择如下图-点击确定 选择后点击重新生成即可生成成功! 如果是之前就有添加,然后再打开这个软件显示office报错,就将之前引用的删除,重新添加引用 。

    2024年02月11日
    浏览(39)
  • Unity 未能找到程序集或命名空间

    程序集定义 Assembly Definition 程序集相当于一个文件夹。如果没有程序集,脚本就会被默认打包到Assembly-CSharp.dll中,这样编译的时候就比较浪费时间,一旦有修改,就要整体重新编译。将项目内的脚本文件放置到多个程序集中,这样当某个文件改动的时候,只会重新编译对应的

    2024年02月12日
    浏览(26)
  • 500行代码手写docker-以新命名空间运行程序

    本系列教程主要是为了弄清楚容器化的原理,纸上得来终觉浅,绝知此事要躬行,理论始终不及动手实践来的深刻,所以这个系列会用go语言实现一个类似docker的容器化功能,最终能够容器化的运行一个进程。 本章的源码已经上传到github,地址如下: 本章要完成的任务则是g

    2024年02月05日
    浏览(34)
  • 【C++对于C语言的扩充】C++与C语言的联系,命名空间、C++中的输入输出以及缺省参数

    铁子们好啊!这是阿辉新开的专栏《拿下C++》的第一篇文章,本文主要带大家了解一下C++,带大家从C语言过渡到C++,所以大家首先要有C语言的基础,否则后面的内容你可能会异常懵逼。不会C语言的铁子,这里推荐各位先看阿辉的专栏《爱上C语言》(点击即可跳转,自荐一下

    2024年02月03日
    浏览(29)
  • 【是C++,不是C艹】 第一个C++程序 | 命名空间 | 输入输出

    💞💞  欢迎来到 Claffic 的博客   💞💞   👉 专栏: 《是C++,不是C艹》👈 前言:   在认识了C++的来历之后,我们就要开始正式学习C++了,系好安全带,准备出发! 注: 你最好是学完了C语言,并学过一些初阶的数据结构。 从创建项目开始,添加项的时候终于 不用删pp 了

    2024年02月04日
    浏览(31)
  • 【C#图解教程】 第六章 方法(上)

    方法是一块具有名称的代码,在类和结构中都经常用到 局部变量位于方法内部,在方法中声明时产生,在方法执行结束时结束 某些情况下,在声明的开始部分包含类型名是多余的,因为可以通过初始化看出是什么类型,所以这时可以统一使用var来声明: 需要注意的是

    2024年02月07日
    浏览(58)
  • 虹科教程 | Linux网络命名空间与虹科PROFINET协议栈的GOAL中间件结合使用

    PROFINET是由PI推出的开放式工业以太网标准,它使用TCP/IP等IT标准,并由IEC 61158和IEC 61784 标准化,具有实时功能,并能够无缝集成到现场总线系统中。凭借其技术的开放性、灵活性和性能优势,PROFINET可应用于过程/工厂自动化、运动控制等领域。通过PROFINET,可实现确定性响应

    2024年02月13日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包