根据组件的.NET软件开发(1)起名

取名空间是什么样

微型总结机科学领域中是由此名字来使用各样代码财富(变量和子程序)的,命名空间(namespace)则是团队这个财富的一组符号,例如目录树是就硬盘上文件们的命名空间。命名空间的陈设性指标是提供一种让一组名称与别的名目分隔绝的章程。在三个命名空间中评释的类的称号与另三个命名空间中宣称的一致的类的称谓不争执。
若果你还是不大概获得命名空间的定义,你借使想象给您一个1T的硬盘,但硬盘中不能成立文件夹,只可以添加文件,你就能体会单一命名空间的弊端了,你必须保障1T的硬盘上具有文件的命名不能够重新!那样您就能从平日操作文件夹的经过中架空出命名空间那个定义了。

 

取名空间分类

自家把近日不等语言中对命名空间的统一筹划分为三类:单一命名空间、独立命令空间、目录树命名空间
第1大家掌握,我们的代码都是由源文件组成的,而既然作为文件,那它们就处在某些文件系统中,而近日半数以上的文件系统都使用了近似目录树的构造来集团文件的命名空间。

据说组件的.NET软件开发

 

纯净命名空间

虽说代码分布在差异的文本里,不过在运行时,全体的函数和类都会被加载到内部存储器里,此时大家都在3个篮子里,没有例外文件分化文件夹的约束,固然那时候各样类或每一个函数如故选择它本身的名字,那就叫单一命名空间。
能够想像,你要直面跟在1T硬盘里不可能建文件夹同样的标题。
您大概会说,那尼玛怎么写代码,好名字就那么多,取1个就少一个,哪来那么多名字给你取,何况本人取的名字随后都恐怕忘记,就别说要跟人搭档来说,岂不是冲突得停不下来。
但其实过多语言都以这么的,比如C,比如Object-C(还无缘无故地在IDE里给您建3个跟文件目录树差别的新目录结构),比如5.3事先的PHP,那种场地下的一种通用处理形式是:自制命名空间。怎么个自制法?就是在起名的时候在名字前增进前缀,完美。

前言

   
随着软件技术的敏捷进步,现代的大型软件都广泛采取了依据软件组件的开发格局。以成熟的CBD(Component Based
Design:基于组件的系列规划)理论为指引,在对系统的解析与设计到位现在,系统开发展现为复用已有组件、开发新组件以及将持有组件装配起来的经过。J2EE大规模地使用各样零件构照复杂的店堂消息种类,拿到了伟大的功成名就。

   
作为后来者,.NET
framework汲取了J2EE的成功经验,在组件化开发方面有着自身独到的设计,在本文中,大家将介绍.NET组件化开发技术的最重点的五个范畴:混合语言开发与组件反射。小编有丰盛的说辞确信读者在掌握了.NET的无敌组件开发效益之后,一定会对.NET
framework的宏图和开发者敬佩不已,并会刺激应用.NET来开发软件系统的掌握兴趣。

目录树命名空间

单纯性命名空间分明是反人类的,需求统筹有组织的命名空间。怎么规划呢?二个粗略的思绪是:既然代码由源文件组成,而源文件又被目录树组织,那命名空间是不是直接采纳目录树啊?笔者以为能够,大家也以为能够,于是就有了目录树命名空间。
目录树命名空间便是直接选取文件名作为代码财富最小单位的名字,每一种文件夹作为分裂的命名空间,使用文件夹路径区分不一样的命名空间。

利用目录树作为命名空间有好多功利,比如:

  1. 优雅的一致性
  2. 选择起来相当直观,哪个命名空间下有哪些东西,打开文件夹就能收看,一目通晓
  3. 是因为文件系统有限帮忙了同一个文书空间下不会有文件重名,所以就等价于保障了同3个命名空间下不会有类重名,等价于保险了同名类一定有例外的命名空间,于是就保险了运用时肯定有措施区分同名类

就算如此目录树这么好,但依然有语言不完全依据目录树来走,甚至更有一齐放任目录树作为命名空间的奇葩设计(其实也有其合理啦):独立命名空间。
用Java举例,Java能够划归为「类目录树命名空间」,因为有两点差别

  1. 一直把目录树作为命名空间好像不太好落成,毕竟四个是文件系统中的东西,1个是运作条件中的东西,于是Java中还亟需你在代码文件里显示地注脚那几个文件属于哪个命名空间(包名),但它又展开强制性地检查:你的命名空间表明得必须和文书夹路径一致!我心中不禁默默嘀咕那不是多此一举吗,可是幸好今后的IDE在您建立文件的时候就会自行给你添加一条科学的命名空间
  2. Java中代码能源的矮小单位能够说是类了,但Java语言允许贰个文书中放八个类(即使只好三个public的),即使那并不是提出做法

错落语言开发

   
Java语言跨平台的安顿,是J2EE在商家级系统中占有优势的基本点原因,为了与J2EE竞争,.NET
framework在筹划系统布局上行使了分支的设计情势,从而在理论上使跨平台成为了或许(事实上,已有忠实可用的系统,MONO就是运转在非Windows操作系统之上的.NET
framework),.NET设计师们还发现了J2EE的二个死穴——J2EE组件必须用Java语言开发!那种使用语言上的“独裁”无疑让热爱别的语言的程序员们很非常的慢活。为此,.NET在软件开发史上第二回在筹划软件运转平台时就考虑到了交集语言开发,在作者眼里,那真是三次影响深入的技术革命。

   
本文不打算周全介绍.NET
framework中夹杂语言开发的里边机理,而只是从利用角度,通过多少个不足却独立的实例,来看望大家什么样在一个工程中融为一炉八种语言开发的.NET组件。

 

单身命令空间

独自命名空间正是祥和整一套跟目录树完全部独用立的命名空间,常常这么些命名空间是用户自定义的,也正是由用户浮现且任性地声明当前代码财富属于哪个命名空间,没有其余自律,PHP5.3之后就应用了那种做法。
这种方式初看会给人带来混淆,已经有一套由目录树构成的命名空间了,你再自身定义一套毫非亲非故系的新的的命名空间,你不嫌累吗?你分得清呢?
本来这种做法会带来不直观的缺点,但与此同时也有其亮点,比如在PHP的使用意况中,PHP作为脚本平时夹杂在各个资源文件中,假如完全使用目录树构成的命名空间,往往会造成空间的浪费,同时让PHP的结构变得卓越松懈,那就很吻合由程序员自身定义一套独立的命名空间了。当然有个别PHP框架会强制须要命名空间跟目录结构的一致性,那正是后话了。

零件的结合

   
当大家供给复用已有个别组件的作用来开发新系统时,大家平时让新开发的零部件简单地包容另3个已有些组件,以高达代码重用的意义,那种开发方式在面向对象设计理论中被叫做“组合”。我们看看3个小例子:

   
大家要设计3个C#组件,其接口如图1所示:

起名 1
图 1 C#组件的UML图示

   
打开VS.NET,创立三个C#类库工程:CSharpComponent,删除原有的Class1,往工程中添加二个新类CSharpClass,在里边扩大二个函数SaySomething,代码如下:

 

public
void SaySomething(string str)

        {

            MessageBox.Show(”
这是 C#贯彻的作用,传入的字串是:”+str);

        }

    然后,从菜单中选“生成”à“生成化解方案”,编译完毕后会生成叁个动态链接库:CSharpClass.dll。

   
今后,咱们已有了三个可复用的软件组件,纵然它的效益大概不足挂齿,但它的的确确是1个软件组件,在本质上与那多少个卖上几千英镑的买卖组件并无不相同。

   
在那边大家须求鲜明:CSharpClass.dll实际上能够称作组件库,而类CSharpClass则足以看做是贰个得以复用的零件。明显,2个组件库(DLL文件)可以包容多少个零部件(即成功某种意义的类)。

   
接着大家再成立三个Windows应用程序项目,但此刻我们用的不再是C#,而是VB.NET了。大家给工程起名为:VBTestComponent,从工具箱中把二个按钮拖到窗体上,我们打算在用户单击此按钮时,让它一贯调用C#组件   CSharpClass.dll中的SaySomething()方法,并从VB中传递1个字串给此格局。

   
为了能应用支付好的C#组件,大家亟须给VB工程添加对CSharpClass.dll的引用。在化解方案能源管理器窗口中的项目节点:VBTestComponent上右击,从弹出菜谱中选:“添加引用…”,将应运而生以下窗体:


2 添加对C#组件CSharpClass.dll的引用

   
单击“浏览…”按钮,找到CSharpClass.dll,明确后如图2所示。单击“明确”按钮关闭窗口,今后,大家就给VB工程扩充了贰个对C#零件的引用,能够在化解方案财富管理器窗口中很驾驭地看出那点:

起名 2
图 3 添加了对C#零件引用后的“消除方案管理器”

 

   
前面包车型大巴作业就一点也不细略了,在按钮的单击事件中书写以下代码:

 

Private
Sub Button1_Click_1(……)
Handles Button1.Click

        Dim obj As
CSharpClassNameSpace.CSharpClass

        obj = New CSharpClassNameSpace.CSharpClass()

        obj.SaySomething(“我是从VB中调用C#组件中的方法而产出的。
“)

End
Sub

 

   
OK,大家未来就达成了在VB中调用C#组件的成效,那大约太简单了吗!

   
聪明的您这时脑瓜一定在转了:既然从VB中能够这么简单地调C#组件,那么,反过来也毫无疑问行。或许,笔者能够做2个VB组件,然后,它又调用1个C#组件,而C#组件又有什么不可调用有些C++开发的组件,……,调来调去,浑然一体。当代愚公曰:“子子孙孙无穷尽也,何愁项目完不成?!”

   
未来再不用强迫全数程序员在2个体系中都用一种语言了,尽能够给各位分配2个独自的零部件,让他们用本人喜欢的言语去付出,只要坚守事先定好的接口就行了。

   
作者想起过去利用VB来调用Win32
API的惨象,不禁欢呼这种优伤的光景有去无回了!

作者Blog:http://blog.csdn.net/bitfan/

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图