标题:sandy看到有用的东西,贴 2008年3月9日 20:38:40 出处:Felix021 时间:Wed, 12 Mar 2008 23:43:50 +0000 作者:felix021 地址:https://www.felix021.com/blog/read.php?722 内容: sandy看到有用的东西,贴 2008年3月9日 20:38:40 呵呵,有信心看完吗? 一、c# --- 像vb一样简单,像c++一样强大的新语 c#是第一流的面向组件的语言 由 turbo pascal, delphi, and visual j++的首席设计师anders hejlsberg 倾心3年设计 所有的语言元素都是真正的对象 开发强壮和可重用的软件 所有的.net framework中的基类库(base class library)都由c# 编写 二、vb.net --- 完全面向对象的basic语言 1.新语言特性 完全面向对象– 继承(inheritance), 重载(overloading), 共享的成员, 结构化异常处理 强壮的语言 – 严格的类型检查, 变量声明时初始化,支持垃圾收集(garbage collection) 强大 – 支持委托(delegates), free threading,variant 数据类型被 object 代替 2.与vb6一致的语法 三、2者的区别? 1.语法上的差异 例如循环的写法 vb.net for i = 1 to 10 ‘ for loop next i c# for (i=1;i myobj1.myevent += this.xxx; myobj2.myevent += this.xxx; ... protected void xxx(...){} 当事件比较多时,c#显著变得比较麻烦,幸好一个过程响应一大堆事件的情况也不太多(不过我就编写过一个过程相应8个事件,移植起来好麻烦!)。原则上说,将静态事件过程移植为动态事件过程并没有完全遵守移植的规定,但我估计他们实现的原理不会相差太多,所以也不用担心。 6、异常处理。vb支持两种形式的异常,即.net框架的异常和vb自己的错误号码。而c#只支持第一种。用到vb自己的错误号码的程序几乎无法移植到c#中,所以应该尽量使用.net框架的异常,如下面vb语句: try ‘ 发生错误的代码 catch when err.number = 52 ‘ 解决错误的代码 end try 这段代码无法直接移植到c#中,只有用exception对象取代err对象获得异常信息,才能顺利移植。另外vb的when语句带给try语句十分灵活的用法,必须用很高的技巧才能在c#中实现,这就需要具体问题具体分析了。 vb支持exit try语句,可以直接从try块或catch块跳转到finally块。c#没有提供类似的语法,可以用以下技巧: [visual basic] try ‘ 一些语句 exit try finally ‘ 一些语句 end try [c#] try { //一些语句 goto __leave; } finally { //一些语句 } __leave: //别忘了这里还有哦! 总之是利用了finally块无法跳过的特征,用goto语句模拟了exit try语句。 如果vb程序用的是vb特有的on error goto语句实现的错误处理,问题就麻烦了。代码可能在过程中上下跳跃,无法预料语句的执行方式。这种代码理解起来就头痛,更不要说移植了。总体来说,把所有语句统统转移到try块中,然后用catch一一处理错误。遇到要返回(resume语句)的时候,只好copy代码了。反正不是一件容易的事情,慢慢改就是了。 7、模块。vb支持模块,c#不支持。但也没有关系,只要在c#中制造一个abstract类,共享所有成员,就和模块一样了。当然不能像vb一样直接访问模块中的成员,需要用到“类名.成员名”的用法。 8、接口。c#在接口方面也没有vb强大(怎么这么重要的功能也不做得好一点?),vb采用implements语句结合接口的成员和类的实现成员,而c#是用名称结合。因此vb就可以随便修改实现成员的访问级别和名称,而c#就不能改名称。将c#移植为vb时,最好利用vb.net编辑器直接实现接口,比较简单。把vb移植为c#时,就必须把改过的名字都改回来,遇到名字冲突就更讨厌了(这时候我几乎不想再移植为c#了)。给一个例子: [visual basic] public class class1 : implements imyinterface public sub dosth() implements imyinterface.method1 end sub end class [c#] public class class1 : imyinterface { public void method1() { } } 9、运算符重载。这会遇到vb头痛了,既然vb不支持运算符重载,那么就必须用子程序和函数来模拟运算符。比如建立plus和minus方法模拟+和-的运算。当然还是有很多情况(比如遇上了explicit和implicit语句)就真的没有办法了,只好不移植了。运算符重载是一个很不错的功能,它能使很多操作简单地完成,如果vb支持它,就真的是完美语言了。 好了,想必最麻烦的地方已经说完了,剩下的就是简单的copy了。虽然有些地方还没有说清楚,但基本上阐明了两种语言的不同(一看,不同还挺多的吧),反正也不用移植大的工程,了解这些内容主要是为了利用双倍的利用已经存在的代码,但愿本文对你有用。由于水平低劣,如有错误请各位大虾指正,小弟必洗耳恭听。 Generated by Bo-blog 2.1.0