C#里面对namespace理解(基础篇)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
C#里面对namespace理解(基础篇)收藏
.NET Framework类库是一个由Microsoft .NET Framework SDK 中包含的类,接口和值类型组成的库.该库对系统功能的访问是建立在.NET Framework应用程序,组件和控件的基础上的.
整个.NET Framework类库就是由很多极大的命名空间组成,所以说命名空间就是
MS .NET的核心一点也不为过,相信下面的很多命名空间初学者都有过接触:
System
包含用于定义常用值和引用数据类型、事件和事件处理程序、接口、属性和处理异常的基础类和基类。
其他类提供支持下列操作的服务:数据类型转换,方法参数操作,数学计算,远程和本地程序调用,应用程序环境管理以及对托管和非托管应用程序的监管。
System.Data
基本上由构成 结构的类组成。 结构使您可以生成可用于有效管理来自多个数据源的数据的组件。在断开连接的方案(如 Internet)中, 提供了一些可以在多层系统中请求、更新和协调数据的工具。 结构也可以在客户端应用程序(如 Windows 窗体)或 创建的 HTML 页中实现。
System.web
提供支持浏览器/服务器通信的类和接口。此命名空间包括 HTTPRequest 类(它提供有关当前 HTTP 请求的大量信息),HTTPResponse 类(它管理 HTTP 到客户端的输出)和HTTPServerUtility 对象(它提供对服务器端实用工具和进程的访问)。System.Web 还包括用于 Cookie 操作、文件传输、异常信息和输出缓存控制的类。
System.Windows.Forms
包含用于创建基于 Windows 的应用程序的类,这些应用程序可以充分利用 Microsoft Windows 操作系统中的丰富用户界面功能。
.NET框架的每个命名空间还包含近 100 个类,并且很多命名空间还包含许多二级命名空间。
从运行库(SDK)的角度看,命名空间只是类型名称的一个集合。特定语言所具有的构造和相应的语法可帮助开发人员构成类型的逻辑组,但运行库在绑定类型时并不使用这些构造。因此,Object 和 String 类都是 System 命名空间的一部分,但运行库只识别每个类型的完整名称,它们分别为 System.Object 和 System.String。
可以构建单个程序集,它使类型看上去像来自两个不同的分层命名空间,如System.Collections 和 System.Windows.Forms;也可以构建两个程序集,均可导出名称中包含 MyDll.MyClass 的类型;通俗点说namespace可以在不同的文件(这里面指的是输出文件,如.dll或者.exe),同时,在同一个程序集里面也可以有多个namespace。
namespace不相当于物理形式存在,与Java不同,Java里面的package对应的是目录,所以,你如果用到java.io.****的话,你得建一个三层目录,比较麻烦;
上面讲了这么多,大家可能有些疑问,这样用namespace做有什么好处?
namespace不是类,也不是对象,它只是类与及其它类型声明的一个包容体,为了让这些类排列的更有顺序,更加利于别人寻找。尽最大程度排除重名。namespace相当于指定了一个寻址方式,告诉编译系统你可以在哪儿找到工程所用的方法。
我们可以通过已经有的NAMESPACE(微软把各种.net预编写好的各种类按照其功能进行分类的一些集合:如上面介绍的System,System.Data),做我们想做的和愿意做的,当然如果你感觉现有的还不够你的使用的话,你也可以自己来使用现有的来扩展,创建自己的NAMESPACE!这样也有助于我们从逻辑上把一个系统分类,譬如把跟Web有关的东西放一起(System.Web),把Windows有关的东西放一起(System.Windows.Forms) ,这样好处就不言而喻了!
下面举几个简单的namespace例子:
1.上一篇文章讲的DLL文件的生成里面就有一个关于namespace的例子,看了我想对初学者可以有不少帮助;
2.
namespace N1
{
public class A{…}//N1.A
}
namespace N2
public class A{…}//N2.A
}
类A定义于各自的命名空间namespace;现在类A对整个程序来说不再是可见Visible 的了。而如若我们在程序中同时"开启"(或叫"曝光"expose)两个命名空间,那么unqualified name A将导致编译错误;此时我们必须使用"全饰名称",如N2.A a;
另外,N1和N2可以相同,编译器认为我们想在原先存在的命名空间中加入新声明declare(这样的话,两个class A就不能重名了);
顺便提一下:在C#程序中,每提及一个"名称",编译器就要对这个"名称"进行"决议(resolve)",简言之,就要让这个"名称"可见(Visible)。
如下例:
Console.WriteLine("Hello ,EdgarSun!");
此时编译器将无法对Console这一"名称"进行决议(resolve);这种情况和C中用strcpy()函数而没包含string这个头文件一样,C中是这样解决的:#include
无法决议(resolve)的"名称";
另一种说法是明确告诉编译器到何处去寻找(look for)这个"名称",那就是我们所说的"全饰名称(full qualified name)":
System.Console.WriteLine("Hello,EdgarSun!")
3.其它的例子就不多举了,书上有很多很好的例子,希望上面的一些总结能够给大家一些帮助;