一、命名空间

1、通过使用using关键字引入命名空间,减少代码量

命名空间对相关的类型进行逻辑分组,通过命名空间能快速的定位到相关的类型,例如:在System.IO命名空间下,定义了所有I/O操作的类型,当我们需要使用相关的I/O操作的类型时,就可以引入该命名空间。代码如下:

public sealed class Program
{
public static void Main()
{
System.IO.FileStream fs=new System.IO.FileStream(...);
}
}

上面的代码构造了一个System.IO.FileStream对象,像这样写代码很繁琐,因为每次都需要写上类型的完全限定名,所以C#编译器提供了using指令,通过using指令导入类型的命名空间,从而避免全面限定名的方式使用类型,代码如下:

using  System.IO;
public sealed class Program
{
public static void Main()
{
FileStream fs=new FileStream(...);
}
}

原理:编译器在编译的时候,会在类型的前面加上命名空间,比如当我们使用FileStream类的时候,编译器会将FileStream类的引用解析为System.IO.FileStream.

在上面的示例代码中,编译器需要保证引用的每个类型都真实存在,而且代码以正确的方式使用类型一也就是调用确实存在的方法,向方法传递正确数量的实参,保证方法具有正确类型,正确使用方法返回值等。如果编译器在源代码文件或者引用的程序集中找不到指定的类型,就会在类型前面加上System.IO前缀,如果找不到匹配项,就逐一地在类型前面加上通过using引入的命名空间,知道找到指定的类型,否则编译就会报错,所以通过using引入命名空间的方式,能极大程度的帮助我们减少代码量.还增强了代码的可读性.

2、编译器查找类型的原理

编译器扫描引用的所有的程序集,在其中查找类型定义,一旦找到了正确的程序集,程序集信息和类型信息就被嵌入到托管模块中的元数据中.为了获取程序集信息必须将定义了被引用程序的信息传递给编译器.C#编译器自动在MSCorLib.dll程序集中查找被引用类型,即使没有显示告诉它这么做.MSCorLib.dll程序集中包含所有核心Framework(FCL类型)的定义.

3、编译器对待命名空间的方式存在潜在的问题:可能两个或者多个类型在不同的命名空间中同名,微软建议开发人员为类型定义具有唯一性的名字,但是“运行时”鼓励组件重用。例如:

应用程序可能同时使用了Microsoft和Wintellect开发的组件,假如两家公司都提供名为Widget类型,两个类型做的事情完全不同,由于干涉不了类型名称。所以当你引入Microsoft和Wintellect命名空间,并使用Widget类型时,编译器就会报CS0104:"Widget"是"Microsoft.Widget"和"Wintellect.Widget"之间不明确的引用的错.

所以必须使用一些方法来解决这个问题,以下是解决方案:

(1)、使用完全限定名称来区分并使用它们,代码如下:

Microsoft.Widget mw=new Microsoft.Widget();
Wintellect.Widget ww=new Wintellect.Widget();

(2)、C# using指令的另一种形式为类型或者命名空间创建别名,如果只想使用命名空间中的少量类型,不想它的所有类型都跑出来"污染"全局命名空间,别民就显得十分方便,代码如下:

using WintellectWidget=Wintellect.Widget;
WintellectWidget w=new WintellectWidget();

(3)、外部别名方式

自行百度

4、关于命名空间的一些建议

参考微软的命名方式,使用公司名称作为顶级名称,以减少发生冲突

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  9. SilverLight命名空间详解-新手入门

    1.核心命名空间 1.xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"是silverlight的核 ...

随机推荐

  1. idea—— 模版配置

    修改File Header: /** * @author: ${USER} Date: ${DATE} Time: ${TIME} */ 新增Package Header: /* * Copyrigh ...

  2. google软件测试之道读后感(一)

    这几天在抽空读一本新书,久负盛名的<google软件测试之道>.之前在网络上一点一点地看过它的英文版,很受触动,还做了很长的读书笔记,现在看到了中文版,才恍觉之前的好些理解存在不恰当的地方 ...

  3. Android崩溃提示 “EGL_BAD_CONFIG"

    这两天将之前提到的一个室内定位程序的ArcGIS的SDK从10.2.8迁移到100.1.0. 期间反复出现奇怪的问题,最终定位到这个问题: java.lang.RuntimeException: cr ...

  4. 初学web前端 ,请大家多多提意见 前几天学的 学写盒子模型

    <!DOCTYPE html><html><head lang="en">    <meta charset="UTF-8&qu ...

  5. idea/eclipse下Maven工程集成web服务(tomcat、jetty)

     idea/eclipse下Maven工程集成web服务 转载请注明出处:http://www.cnblogs.com/funnyzpc/p/8093554.html 应用服务器最常用的一般有这哥仨: ...

  6. ROC和AUC的区别

    ROC是一个曲线,AUC是曲线下面的面积值.   ROC曲线是FPR和TPR的点连成的线. 可以从上面的图看到,横轴是FPR, 纵轴是TPR (TPR = TP / (TP + FN):FPR = F ...

  7. 剑指Offer——当当+搜狐+好未来笔试题+知识点总结

    剑指Offer--当当+搜狐+好未来笔试题+知识点总结 情景回想 时间:2016.9.21 15:00-21:00 地点:山东省网络环境智能计算技术重点实验室 事件:当当笔试.搜狐笔试.好未来笔试 3 ...

  8. C#调用RESTful API

    如今非常多的网络服务都用RESTful API来实现. 比方百度的搜索推广API介绍使用Rest原因:REST+JSON风格的API相比SOAP+XML,优点是:调用更加灵活.也更easy扩展:JSO ...

  9. Matlab 2014b For Mac安装破解

    1.Matlab 2014b 的安装和破解文件下载: 安装文件:http://www.cncrk.com/downinfo/80718.html 破解文件:http://pan.baidu.com/s ...

  10. 程序员最常用的Linux命令

    命令 用法 说明 pwd pwd 显示当前所在目录 ls ls -al 以列表形式,显示当前目录下的所有文件和目录,大多数情况可直接用ll cd cd  /home/hadoop/hbase/ 进入到 ...