前言

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

命名空间

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. n. Elasticsearch JAVA API操作

    引言 Elasticsearch所支持的客户端连接方式有两种 Transport 连接 底层使用socket连接,用官方提供的TransPort客户端,网络IO框架使用的是netty Http连接(R ...

  2. CentOS8 安装ansible

    # 安装epel扩展源 yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm -y # ...

  3. Spring之WebMvcConfigurationSupport

    WebMvcConfigurationSupport是mvc的核心配置.开发spring,了解和掌握这个是必须的. 为了简约篇幅,本文把"WebMvcConfigurationSupport ...

  4. mysql8的collate问题和修改

    环境 os:centos 7.6 数据库:8.0.22 64bit 问题: 字段a,b它们的collate不一样,结果关联的时候,发现错误. 查询了以下,发现挺多的,逐个修改挺麻烦的,于是整理了如下s ...

  5. Java解析微信获取手机号信息

    在微信中,用户手机号的获取通常是通过微信小程序的getPhoneNumber接口来实现的.这个接口允许用户在授权后,将加密的手机号数据传递给开发者.由于隐私保护,微信不会直接提供用户的明文手机号,而是 ...

  6. [ABC347C] Ideal Holidays题解

    [ABC347C] Ideal Holidays题解 原题传送门 原题传送门(洛谷) ​ 题意翻译: ​ 在 \(AtCoder\) 王国中,一个周有 \(A+B\) 天.其中在一周中, \([1,A ...

  7. 初识python day1记录

    程序语言中的分类 在程序中有分为高级语言Java python go与低级语言C 汇编,每种语言都有自己的规则,但是最终目的都是给计算机识别的,所以他的底层肯定是一些二进制010101,像java/p ...

  8. C# pythonnet(2)_FFT傅里叶变换

    Python代码如下 import pandas as pd import numpy as np import matplotlib.pyplot as plt # 读取数据 data = pd.r ...

  9. 3562-Linux系统使用手册

  10. yb课堂之个人信息接口开发 《十三》

    根据token从查询个人信息接口开发 直接解密token,获取个人信息 通过token解密查询数据库获取个人信息 UserController.java package net.ybclass.onl ...