打印本文 打印本文 关闭窗口 关闭窗口
C#与vb.net的区别
作者:武汉SEO闵涛  文章来源:敏韬网  点击数2126  更新时间:2009/4/23 19:00:36  文章录入:mintao  责任编辑:mintao
bsp;Handles myobj1.MyEvent, myobj2.MyEvent 
   
  ==> 
   
  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了。虽然有些地方还没有说清楚,但基本上阐明了两种语言的不同(一看,不同还挺多的吧),反正也不用移植大的工程,了解这些内容主要是为了利用双倍的利用已经存在的代码,但愿本文对你有用。由于水平低劣,如有错误请各位大虾指正,小弟必洗耳恭听。

上一页  [1] [2] 

打印本文 打印本文 关闭窗口 关闭窗口