已阅读5页,还剩4页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
大家好,今天我们来讲一下命名空间,通常一个软件项目包含类可能成千上万,如果2个以上的类有相同的名称时该怎么办呢?在C#中您可以使用命名空间就是namespace来解决命名冲突的问题,C#中命名空间其实就类似于Java中的Package就是包,在C#中命名空间可以用来定义C#类的范围。 PPT:.NET Framework类库由命名空间组成。每个命名空间都包含可在程序中使用的类型:类,结构,枚举,委托和接口。 下面我们来做个例子来看看如何声明namespace,创建一个namesapce.cs文件,代码如下: usingSystem; /使用namespace关键字,后面是命名空间的名称CG /在大括号之间的所有代码都属于这CG命名空间 namespaceCG /声明一个类Test classTest staticvoidMain() /打印一行MynameisCG Console.WriteLine(MynameisCG); using System;/使用namespace关键字,后面是命名空间的名称CG/在大括号之间的所有代码都属于这CG命名空间namespace CG /声明一个类Test class Test static void Main() /打印一行My name is CG Console.WriteLine(My name is CG); 保存文件后进行编译执行,效果如下: 屏幕上打印出了我们刚才输入的这行字符,看我们刚才的代码。 在这个例子中,在CG这个命名空间之下声明了一个类,当然这个类很简单,只是在屏幕上打印一行字。我们当然可以在这个命名空间下声明很多个类,去实现不同的功能。我们接下来把输出语句放到别的命名空间下,下面我们来试一下。我们首先在原代码中声明另一个命名空间,这个命名空间的名字叫A。A地下声明一个类,详细请看代码: usingSystem; /使用namespace关键字,后面是命名空间的名称CG /在大括号之间的所有代码都属于这CG命名空间 namespaceCG /声明一个类Test classTest staticvoidMain() /我们在入口函数里调用A命名空间里的PrintName类底下的intro这个函数 /首先声明PrintName类,前面要加上命名空间的名称 /并且对其初始化 A.PrintNamea=newA.PrintName(); /可以使用a实例中的intro函数了 ro(); /声明另外一个命名空间A namespaceA /声明一个类PrintName publicclassPrintName /写个输出的函数 publicvoidintro() Console.WriteLine(MynameisA); using System;/使用namespace关键字,后面是命名空间的名称CG/在大括号之间的所有代码都属于这CG命名空间namespace CG /声明一个类Test class Test static void Main() /我们在入口函数里调用A命名空间里的PrintName类底下的intro这个函数 /首先声明PrintName类,前面要加上命名空间的名称 /并且对其初始化 A.PrintName a= new A.PrintName(); /可以使用a实例中的intro函数了 ro(); /声明另外一个命名空间Anamespace A /声明一个类PrintName public class PrintName /写个输出的函数 public void intro() Console.WriteLine(My name is A); 好,我们进行编译执行程序,效果如下:屏幕上成功打印了My name is A,也就是说我们调用了A这个命名空间PrintName类底下的intro这个函数。当我们在CG命名空间下想使用A命名空间下的函数,(A.PrintName)则必须要在它的类前面加上A这个命名空间的前缀,才能去使用它。 下面我们再声明另外一个命名空间B,它里面的代码和A命名空间里的代码完全一样,为了以示区别,把输出语句改成My name is B,入口函数也稍做改动,代码如下: usingSystem; namespaceCG classTest staticvoidMain() A.PrintNamea=newA.PrintName(); ro(); /初始化B命名空间下的PrintName类 B.PrintNameb=newB.PrintName(); /调用intro函数 ro(); /声明另外一个命名空间A namespaceA /声明一个类PrintName publicclassPrintName /写个输出的函数 publicvoidintro() Console.WriteLine(MynameisA); /再声明另外一个命名空间B namespaceB /声明一个类PrintName publicclassPrintName /写个输出的函数 publicvoidintro() Console.WriteLine(MynameisB); using System;namespace CG class Test static void Main() A.PrintName a= new A.PrintName(); ro(); /初始化B命名空间下的PrintName类 B.PrintName b = new B.PrintName(); /调用intro函数 ro(); /声明另外一个命名空间Anamespace A /声明一个类PrintName public class PrintName /写个输出的函数 public void intro() Console.WriteLine(My name is A); /再声明另外一个命名空间Bnamespace B /声明一个类PrintName public class PrintName /写个输出的函数 public void intro() Console.WriteLine(My name is B); 进行编译执行查看效果,如图: 在这里呢,分别调用了A命名空间里的intro函数和B命名空间里的intro函数。而且,它们底下的类PrintName和类下的函数intro都是一模一样的。但是通过了它们的命名空间的前缀,将它们区分开来,也就是说,在C#中只要使用了命名空间就不必担心你写的类会跟其他人所写的类有相同的名称。 下面我们来看一下使用命名空间的好处: PPT:1.代码可以分布在多个文件中 2.命名空间具有扩展性 3.可以堆砌出层次式的类组织结构 我们先来看一下第三点,命名空间和类一样,允许采用嵌套的结构,一个命名空间可以包含其他命名空间,形成层次式结构,以更容易分组,管理。好,我们再修改下代码,在A和B命名空间上嵌套一个命名空间A,把A和B命名空间的名称改为A1,A2。代码如下: usingSystem; namespaceCG classTest staticvoidMain() /访问的命名路径名要完整 A.A1.PrintNamea=newA.A1.PrintName(); ro(); A.A2.PrintNameb=newA.A2.PrintName(); ro(); namespaceA namespaceA1 publicclassPrintName publicvoidintro() Console.WriteLine(MynameisA); namespaceA2 publicclassPrintName publicvoidintro() Console.WriteLine(MynameisB); using System;namespace CG class Test static void Main() /访问的命名路径名要完整 A.A1.PrintName a = new A.A1.PrintName(); ro(); A.A2.PrintName b = new A.A2.PrintName(); ro(); namespace A namespace A1 public class PrintName public void intro() Console.WriteLine(My name is A); namespace A2 public class PrintName public void intro() Console.WriteLine(My name is B); 我们再编译执行后效果也是一样的。A命名空间下有A1和A2这2个命名空间,要找到他们的类和访问他们的函数时,就必须在初始化实例的时候需要给出全路径名(A.A1.PrintNamea=newA.A1.PrintName();),这样呢就形成了层次式的结构,以更容易的分组和管理。 我们再来看下使用命名空间的好处。第一点:代码可以分布在多个文件中。在同一个命名空间下的不同类可以分布在多个文件中存储,不过在使用嵌套类的时候要小心,他们必须在同一个文件中。不可以跨不同文件存在,下面我们把代码再修改下。把这个类移植到另外一个文件中,我们新建一个文件,名字叫PrintName.cs。里面的命名空间名也是CG,namespace.cs和printName.cs代码如下:PrintName.cs usingSystem; namespaceCG publicclassPrintName publicvoidintro() Console.WriteLine(MynameisA); using System;namespace CG public class PrintName public void intro() Console.WriteLine(My name is A); namespace.cs usingSystem; namespaceCG classTest staticvoidMain() PrintNamea=newPrintName(); ro(); using System;namespace CG class Test static void Main() PrintName a = new PrintName(); ro(); 这个时候,我们要对这2个文件进行同时编译,csc时后面跟2个文件名,中间用空格隔开,然后执行namespace,效果如图所示: 好,结果出来了。我们回头看一下代码。我们在主文件中(namespace.cs)中使用了CG这个命名空间,在PrintName文件中也使用了CG这个命名空间。换句话说,相同的命名空间可以分布在不同的文件之中,而在调用的时候,不需要再次去引用这个类的命名空间的前缀了,这样呢使我们的管理变得方便很多。 在实际的编程中,如果程序较大而且会频繁的更新,则需要把程序分布在不同的文件之中。就比如我们玩网络游戏,一个游戏的大小有1G,而且一个星期就要更新一次,如果游戏的程序放在一个文件之中,那通过网络更新的时候我想再强健的网络也会受不了。但如果把一个程序分布在多个文件之中,哪个文件更改就下载哪个文件,这样就不会存在网络问题了。 在C#中,你可以把类库编译成dll文件,供程序调用。下面我们来试一下把PrintName做成dll文件。进入命令行窗口,进入到我们放PrintName文件的地方,输入csc /target:library PrintName.cs,如图所示:我们去看看放置PrintName.cs文件下,已经产生了一个PrintName.dll的文件了。如图所示: /target:library 代表着把cs文件编译成dll文件,接下来我们把主文件和dll文件进行相关联,并编译,还是使用csc命令,输入csc /reference:PrintName.dll namespace.cs,这里的reference表示跟某个dll进行关联。关联后然后我们再执行namespace程序。如图所示: 屏幕上正常输出了My name is A。好,接下来我们把程序稍改一下,就当这个游戏需要更新了。我们把PrintName文件中的输出语句内容改下,改成My name is B。然后我们对这个PrintName文件重新编译dll,输入csc /target:library PrintName.cs,编译成功后我们直接执行namespace看看效果如何: 好,我们看到屏幕的输出改变了,它由原来的My name is A改成了My name is B,也就是说我们不需要再编译exe文件,而只编译它所调用到的dll文件,这使得我们对程序作出修改时不至于重新编译整个程序,这样做的好处是显而易见的。 我们现在来看一下第二点:命名空间具有扩展性。 你可以在命名空间中增加新类,而不影响其他已存在于此命名空间的类,使得设计灵活性更高。 下面我们来讲一下别名(Alias)。 PPT:使用using前缀指令可以有效地解决命名空间冲突问题,不过它还有一个特性,使用using加上简称,可以让定义在其他命名空间的类型更容易使用,大多是应用在使用简短的名称来代替欲使用的类。我们看下下面的代码: usingSystem; namespaceCG classTest staticvoidMain() /这个前缀十分淤长 ParentNameSpace.ChildNameSpaces.PrintNamea=newParentNameSpace.ChildNameSpaces.PrintName(); ro(); /这里使用了嵌套的命名空间 namespaceParentNameSpace namespaceChildNameSpaces publicclassPrintName publicvoidintro() Console.WriteLine(MynameisA); using System;namespace CG class Test static void Main() /这个前缀十分淤长 ParentNameSpace.ChildNameSpaces.PrintName a = new ParentNameSpace.ChildNameSpaces.PrintName(); ro(); /这里使用了嵌套的命名空间namespace ParentNameSpace namespace ChildNameSpaces public class PrintName public void intro() Console.WriteLine(My name is A); 我们看到在Main函数中初始化类的时候,前面的命名空间十分的淤长,看上去很不爽。下面我们用一下命名空间的别名来改写这段代码。代码如下:usingSystem; /起个别名A代替ParentN
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2023年阿里辅警协警招聘考试备考题库及答案详解(各地真题)
- 2024年南京辅警协警招聘考试真题附答案详解(培优)
- 2023年赤峰辅警协警招聘考试备考题库含答案详解(a卷)
- 2024年宁德 辅警协警招聘考试真题及答案详解参考
- 2024年呼伦贝尔辅警招聘考试题库含答案详解(新)
- 2023年阿坝州辅警招聘考试真题含答案详解(综合题)
- 2024年临沂辅警协警招聘考试备考题库及答案详解(夺冠系列)
- 2023年鹤壁辅警协警招聘考试真题含答案详解(培优)
- 2023年陕西辅警协警招聘考试真题附答案详解(巩固)
- 江苏省苏州新区实验中学2023年物理高二上期末统考试题含解析
- 2025年合肥文旅博览集团招聘笔试参考题库含答案解析
- 最优化方法及其Python程序实现完整全套教学课件
- 广告设计师习题库及参考答案
- 雨季水害重点部位巡视检查制度
- 工程伦理-核工程的伦理问题
- 小儿舌诊-课件
- 新媒体技术与应用PPT全套完整教学课件
- 修井工程套管损坏的修复详解
- 基于超深亚微米工艺的E
- 返工返修流程及作业指导书
- GB/T 16857.12-2022产品几何技术规范(GPS)坐标测量系统(CMS)的验收检测和复检检测第12部分:关节臂式坐标测量机
评论
0/150
提交评论