前言

本文只是为了复习,巩固,和方便查阅,一些知识点的详细知识会通过相关链接和文献标记出来。

命名空间

1.1 概念

  • 可以把命名空间看做字符串,他加在类名或类型名前面并且通过点进行分割
  • 既然看做是字符串,那么 【命名空间名.类名】称之为 完全限定名
  • 命名空间是共享命名空间名的一组类和类型

以上的文字很好理解,比如存在一个类和命名空间。那么它的命名空间名是 ControlLib.Helper  ,完全限定名是 ControlLib.Helper.AnimationHelper

using System;
using System.Windows;
using System.Windows.Media.Animation; namespace ControlLib.Helper
{
/// <summary>
/// 包含一些常用的动画辅助方法
/// </summary>
public class AnimationHelper
{
/// <summary>
/// 创建一个Thickness动画
/// </summary>
/// <param name="thickness"></param>
/// <param name="milliseconds"></param>
/// <returns></returns>
public static ThicknessAnimation CreateAnimation(Thickness thickness = default(Thickness), double milliseconds = 200)
{ } /// <summary>
/// 创建一个Double动画
/// </summary>
/// <param name="toValue"></param>
/// <param name="milliseconds"></param>
/// <returns></returns>
public static DoubleAnimation CreateAnimation(double toValue, double milliseconds = 200)
{ }
}
}

1.2 补充

  • 一个源文件可以具备多个命名空间,相同的命名空间也可以在多个源文件出现
  • 命名空间可以被嵌套(原文嵌套和分离声明,如下代码)
  • 命名空间之间是独立的
  • C#10之后,命名空间不需要大括号了,可以简写 namespace GenshinDailyTools;
namespace GenshinDailyTools
{
/// <summary>
/// 输出格式化
/// </summary>
public static class WriteLineUtil
{
public static void WriteLineLog(object? e)
{
}
} namespace DebugTools
{
/// <summary>
/// 输出格式化
/// </summary>
public static class DebugLineUtil
{ }
}
}
namespace GenshinDailyTools
{
/// <summary>
/// 输出格式化
/// </summary>
public static class WriteLineUtil
{
public static void WriteLineLog(object? e)
{ }
} }
namespace GenshinDailyTools.DebugTools
{
/// <summary>
/// 输出格式化
/// </summary>
public static class DebugLineUtil
{
public static void WriteLineLog(object? e)
{ }
}
}

using指令

这里的using,只讨论和命名空间相关

2.1 别名和static

大家都知道,在使用了using后,那么调用就不需要再使用完全限定名称,如 Console.WriteLine。如下代码就分别使用两种方式

  • 可以给命名空间取别名
  • 也可以给空间内的一个类型
using Syst = System;
using Sc = System.Console;
namespace GenshinDailyTools;
/// <summary>
/// 输出格式化
/// </summary>
public static class WriteLineUtil
{
public static void WriteLineLog(object? e)
{
var time = Syst.DateTime.Now.ToString("HH:mm:ss"); Sc.WriteLine($"[1.0.0.1][{time}]:{e}");
}
}

当然我们还可以再简单一些,使用 using static System.Console;这样只需要使用 WriteLine($"[1.0.0.1][{time}]:{e}");即可

2.1 global using和ImplicitUsings

C#10 使用 global using,默认都会using该命名空间。一般做法是创建一个源文件,把所有需要的命名空间都放到一个文件内

至于ImplicitUsings,为隐式Usings。要使用它,需要在.csproj声明并使用它。作用是在虽然这个using不可见,但是全局范围内使用。

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net6.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup> </Project>

比如使用了隐式Usings,代码简化为如下图所示。

如果需要寻找这个隐藏的GlobalUsings,它位于 obj/Debug/net6.0/[ProjectName].GlobalUsings.g.cs

// <auto-generated/>
global using global::System;
global using global::System.Collections.Generic;
global using global::System.IO;
global using global::System.Linq;
global using global::System.Net.Http;
global using global::System.Threading;
global using global::System.Threading.Tasks;

程序集

3.1 程序集结构

  • 清单(程序集名称标识符:名称、版本、文化和公钥【关于程序集信息,可以在VS里面属性查看】,程序集文件列表,指示程序集在哪里的地图或者说运行这个程序集需要的许可,引用其他程序集的信息)
  • 类型元数据包含程序集定义所有类型的信息
  • IL,公共中间语言代码
  • 资源部分

可以使用获取程序集集合 AppDomain.CurrentDomain.GetAssemblies();从应用程序结构来看如下图所示,因为涉及到反射相关,这里不做详细描述。

参考资料

C# 程序集Assembly

C# 中 using 关键字的使用技巧

《C#图解教程》

C# 命名空间和程序集 小记的更多相关文章

  1. C#图解教程 第二十一章 命名空间和程序集

    命名空间和程序集 引用其他程序集 mscorlib库 命名空间 命名空间名称命名空间的补充命名空间跨文件伸展嵌套命名空间 using 指令 using命名空间指令using别名指令程序集的结构 程序集 ...

  2. 读经典——《CLR via C#》(Jeffrey Richter著) 笔记_命名空间和程序集的关系

    命名空间和程序集不一定相关 1. 同一个命名空间中的各个类型可能是在不同的程序集中实现的.(System.IO.FileStream在MSCorLib.dll程序集中,而System.IO.FileS ...

  3. C#中的命名空间和程序集

    前言 今天这篇文章和大家一起学习下C#语言下的命名空间和程序集. 在日常的编码工作中,我们对命名空间和程序集都不会很陌生.在创建项目文件时,IDE自动会为我们创建好一个大的命名空间和程序集.大多数业务 ...

  4. C# 命名空间和程序集

    一.命名空间 1.通过使用using关键字引入命名空间,减少代码量 命名空间对相关的类型进行逻辑分组,通过命名空间能快速的定位到相关的类型,例如:在System.IO命名空间下,定义了所有I/O操作的 ...

  5. .net命名空间和程序集详解

    命名空间是一种用于将逻辑上相似的类按层次结构分组的机制.这种机制防止了命名冲突.在这种结构化采用被点号"."分隔的单词来实现.通常最顶层的命名空间是System,例如System; ...

  6. .NET 程序集与命名空间

    程序集 程序集(assembly)是一个或多个托管模块,以及一些资源文件的逻辑组合. 组成部分 Windows文件首部 CLR文件首部 程序集清单 类型元数据 MSIL(CIL)代码 嵌入资源集 作用 ...

  7. C#之回到了最初的起点----解决方案、项目、程序集、命名空间

    C#之回到了最初的起点----解决方案.项目.程序集.命名空间 ——Percy 初学者很容易把这些概念搞混淆.先说说项目(Project),通俗的说,一个项目可以就是你开发的一个软件.在.Net下,一 ...

  8. C# 获取命名空间对应的程序集位置

    由于同名命名空间会被多个程序集使用,C#没有提供直接的方法(对象浏览器也不行)通过命名空间获得程序集位置,这样就不方便找到那些引用文件时什么. 那么可以在立即窗口,中断某个代码的时候,去查询类所在程序 ...

  9. 编写高质量代码改善C#程序的157个建议——建议123:程序集不必与命名空间同名

    建议123:程序集不必与命名空间同名 程序集一般会和命名空间同名,但这并不是必须的.事实上,不同名的命名空间和程序集是很常见的. 程序集表示的是一种物理上的分组,而命名空间是逻辑上的分组,两者没有必然 ...

  10. 一次修改闭源 Entity Provider 程序集以兼容新 EntityFramework 的过程

    读完本文你会知道,如何在没有源码的情况下,直接修改一个 DLL 以去除 DLL 上的强命名限制,并在该程序集上直接添加你的“友元程序集(一种特殊的 Attribute,将它应用在程序集上,使得程序集内 ...

随机推荐

  1. 怎么实现鼠标移入第i个li则对应显示第i个div,默认显示第一个LI

    html 部分 <ul> <li>菜单1</li> <li>菜单2</li> <li>菜单3</li> <li ...

  2. nordic的nrf52系列——ADC在使用时如何校准增益误差(基于SDK)

    简介:ADC在实际使用的时候都要进行误差校准,那Nordic的nrf52系列如何进行校准,如果不校准又有什么影响尼,接下来我将通过实验进行测试,验证不校准和校准的影响(本测试的基础是,默认输入阻抗和采 ...

  3. springboot项目添加logback日志

    1.application.yml 配置日志文件路径: logging: config: classpath:logback.xml file: /usr/local/log/projectName/ ...

  4. 使用Kubesec检查YAML文件安全

    目录 一.系统环境 二.前言 三.Kubesec简介 四.使用Kubesec检查YAML文件安全 五.总结 一.系统环境 本文主要基于Kubernetes1.22.2和Linux操作系统Ubuntu ...

  5. selenium窗口之间的切换

    import time from selenium.webdriver import Edge from selenium.webdriver.common.by import By from sel ...

  6. bs4解析-湖南农场品价格行情

    import requests from bs4 import BeautifulSoup import csv url = 'https://price.21food.cn/market/174-p ...

  7. 【路径规划】OSQP曲线平滑 公式及代码

    参考与前言 apollo 代码:https://github.com/ApolloAuto/apollo/tree/master/modules/planning/math/smoothing_spl ...

  8. 【价格全面下调】一片含税79元,双核A7@1.2GHz,-40℃~85℃真工业级!

    自9个月前,创龙科技全志T113-i核心板(SOM-TLT113)推出之后,受到广大工业用户的高度关注,且超过300家企业已选用创龙科技T113-i核心板用于终端产品开发. 为了让更多用户轻松选择T1 ...

  9. Redis 高阶应用

    生成全局唯一 ID 全局唯一 ID 需要满足以下要求: 唯一性:在分布式环境中,要全局唯一 高可用:在高并发情况下保证可用性 高性能:在高并发情况下生成 ID 的速度必须要快,不能花费太长时间 递增性 ...

  10. 浙江省赛决赛 misc2 蝎子

    Misc 2 tcp.stream eq 0 内得知是冰蝎3.0,key是e46023a69f8db309 <?php @error_reporting(0); session_start(); ...