云阳二中吧 关注:30贴子:154
  • 13回复贴,共1

VB.NET与C#.NET

只看楼主收藏回复

序:   
    在网上经常能看到   一些评论和比较C#、VB.net优劣的文章。其中绝大多数都认为:VB.net就没有它存在的必要,VB.net迟早要被C#取代。  确实,计算机语言不是很重要的,也许讨论它有点无聊。所以还希望那些“心中无剑”、“架构、思想至尚”的高手们口下留情。   
    关于VB.net与C#在功能、能力、面向对象的特性上,实在是难分伯仲。这个已是不争的事实。尤其是VS.net2005中,这两种语言已经达到了惊人地相似!   
    下面就通过三个大方面对这这两种语言进行比较:   
一、语言的人性化区别     
  C#像傻男人,VB.net像聪明贤惠的女人   
  从代码的风格就可以看出。     
  例1.   声明变量时:   
  C#: int   iTest   ; //很直接的语气,类似于:擦汗!拿毛巾   
  VB.net Dim   iTest   As   Integer ‘很委婉的语气,类似于:小王,给我拿条毛巾,我用它擦汗~   
  实现完全相同的功能,但有着很明显的区别。哪个更人性化、更易懂呢?   
  例2.语言的关键字上:   
  C#关键字:   
  using、this、void、base、abstract、sealed、virtual、switch、internal、static   
  相应的VB.net关键字:   
  Imports、Me、Sub、MyBase、MustInherit、NotOverridable、MustOverride、Select   、Friend、Shared   
  比较一下,C#的关键字比较冰冷,是具有一定“机器味道”的语言。   
  而VB.net的关键字,都是“人的行为”,“人的称谓”。   
  相信VB.net的语法更具亲和力,更易于帮助我们理解面向对象的特性。   
二、语言的先进性的对比   
  现在,计算机软件工程越来越庞大,已经远远不是10年前的几十KB大小的级别了。这就对语言的可扩展性、可辅助性提出了更高的要求。“面向对象”便是这个需求的一个产物。   
    
  从现有的语言来看,具有“标识符”的标识性语言具备更高的容错性、可调试性、可扩展性。比如HTML、XML。尤其是XML已经成为了下一代语言的模型。   
  为什么像HTML、XML这种具有“开口”和“封口”的语言   有更高的容错性、可调试性呢?这要取决于它的“吝啬”性。“开口”和“封口”可以把故障的范围最小化,使出现问题的部分尽量不影响其它部分。比如说:在HTML的<table>中,少写一个<TR>多写一个<TR>均不会对表格中其它行造成太大的影响。   
  与   这种“吝啬”的语法相反的是“贪婪”性的语法。什么是“贪婪”性呢?这个问题也不太好解释。不过,这种特性与正则表达式的解析十分十分地一致。“吝啬性”的正则表达式   用做   精确匹配Group时有着较高的性能,而“贪婪性”的正则表达式用于判断IsMatch时有着较高的性能。   
  像C类的所有封口均使用大括号的语言,就属于这种“贪婪性”性的语言。过多相同的封口使得代码更加地难于控制。    
  许多人抱怨微软,为什么不给C#加上动态编译、加上自动完成……,实际上,微软何尝不想加啊,但由于C#的语法特性,是根本无法实现的。下面就用实例来说明为什么C#无法实现动态编译:   
  看下面的C#代码段,代码中的大括号是不平衡的:   
  class   A   {   
          class   B   {   
                  class   C   
                  {   
                          int   F1()   
                          {   
                                  return   1;   
                          }   
                          int   F2()   
                          {   
                                  return   2;   
                          }   
                  }   
  }   
  假如现在已经有了C#的动态编译器,现在   要求编译器指明   到底是哪里丢失了大括号!   
  这时,编译器就糊涂了:因为   不论是把大括号加在F1的末尾   还是加在class   A的末尾   都是行得通的,虽然这两种情况的意义是完全不同的,即:不能判断F1到底是Class   C的方法,还是Class   B的方法。那么连带下一步,在代码的其它部分   就更无法判断   调用F1的代码的合理性了。    



1楼2006-11-02 11:41回复
      这里只是举了一个简单的例子,实际的情况比这个更复杂。我们可以看到,在C语言的代码没有完全正确地书写之前,它的结构是有可能极度混乱、多意性的,在这种极度混乱的环境下   是无法判断故障之所在、无法正确识别对象的结构的。自然,这样的动态编译器也就成了“累赘”。   
      相比之下,同样的内容   看看VB语法:   
      Class   A   
      Class   B   
      Class   C   
      Function   X1()   As   Integer   
      Return   1   
      End   Function   
      End   Class   
      Function   X2()   As   Integer   
      Return   2   
      End   Function   
      End   Class   
      End   Class   
      无论你删除End   Class还是删除End   function,故障范围都不会扩大,定位就可以做到精准。    
      检错如此,自动完成代码也是如此。在C#环境下,由于代码结构可能存在着“多意性”,所以IDE有可能无法决定做处理的确切位置。    
      当然,C类的代码并不是没有优点,其优点主要有二:   
      1.节省代码所占的磁盘和内存空间   
      2.使编译器的体积能够做得更小(最终还是为了节省磁盘空间)   
      只有在   内存和磁盘空间非常珍贵的过去的年代里,C类语言代码才能够更具优势。   
      然而在内存和磁盘如此丰富的今天,这种优势已经成了劣势。   
      借助于这种具有确定的“开口”与“封口”的特性,相信VB.net会走得更远。   
    三、语言的灵活性、适应性的对比   
      C#的代码,可以“随便书写”:在一行里可以写多条语句,一条语句可以分成多行来写。这使得它的代码有可能更加地“松散”。虽然C#允许您把代码写得非常地松散,不过在实际的使用中,几乎所有的使用者都默默地走向了VB的代码风格(一行一条语句)。最后,它的分号成了累赘。   
      虽然C#的代码更加地自由,不过C#的思想比起VB.net起来却是更加地死板。   
      在这方面,我觉得把C#比做手动档汽车、把VB.net比做自动档汽车是比较合适的。自动档汽车也可以用手动档的方式驾驶。   
      C#的思想、思路在VB.net中均可实现,而VB.net的思想(自动档)却经常无法在C#上实现。下面举例说明:   
      例一:事件模型   
      在C#中,事件模型是固定的,构造一个事件模型通常需要下面的思路:   
      建立事件代理结构、声明事件、建立事件处理方法、添加事件句柄、判断事件代理是否挂到上实例、通过代理方法引发事件。   
      在VB.net中,即可以按照C#所用的模式建立事件,也可以用VB.net自身所带的RaiseEvent方法实现。虽然他们编译后的结构几乎是一样的,但毕竟VB.net让我们有了更多的选择,何乐而不为呢?下面就看看VB.net引发事件的两种方法示例:     
      方法一:用RaiseEvent.   
      这是一种非常快捷、代码思路非常清晰的一种方法:   
      Class   EventClass   
      Public   Event   E1(sender   as   Object,e   as   XXXEventHandler)   
      Sub   XXXX()   
      RaiseEvent   E1(Me,new   XXXEventHandler(…)   
      End   Sub   
      End   Class   
      方法二:用C#的的思路   
      Public   Delegate   Sub   xxxHandler(ByVal   sender   As   Object,   ByVal   e   As   EventArgs)   
      Public   Class   A   
      Public   Event   XXX   As   xxxHandler   
      Public   Overridable   Sub   OnXXXEvent(ByVal   sender   As   Object,   ByVal   e   As   EventArgs)   
      If   XXXEvent   IsNot   Nothing   Then   
      XXXEvent.Invoke(sender,   e)   
      End   If   
      End   Sub   
      Sub   X()   
      OnXXXEvent(Me,   New   EventArgs)   
      End   Sub   
      End   Class   
      “用尽量少的代码   做出更多的事情”是每个人程序员的最爱!   
      很显然,VB.net在这方面占尽了优势。   
      例二:可选参数结构   
      如下代码展示了VB特有的结构:可选参数   
    


    2楼2006-11-02 11:41
    回复
      • 211.139.189.*
      满篇笑话,从你发表此文到现在已经差不多一年,C# 已经是如日中天,VB.net 还差那么一大截。虽然人才市场上招聘的C#程序员的职位比Java要少一些,但招VB.net的呢?我还没见到几个影子!这是事实!
      缘何跟你的说法恰恰相反?因为你不了解 C# ,C# 怎么自动完成?输入 if 按两下 Tab 试试……比 VB 快多少倍?至于其它代码量、人性化等等,我就懒得一对一说了,完全是你不懂怎么操作的问题。
      事实是最好的证明,C# 发展极其迅猛,已经把 VB.net 远远抛在后头。
      Basic 是个缩写,原意就说是给“初学者”用的语言,不信你去查资料。


      4楼2007-10-21 11:42
      回复
        • 60.165.121.*
        有道理,只不过国人最早接受的都是C,而且C的书籍较多,所以才有了现在的局面,不过VB的方便性确实不错,不久的将业会大有发展的


        7楼2008-12-08 19:42
        回复
          • 218.213.76.*
          一派胡言


          9楼2009-03-11 03:39
          回复
            唉,中国人的盲目跟风什么时候能改掉呀!悲哀,!!!
            程序员应该是选择自己喜欢的语言!而不是盲目的跟风,没出息!
            凡事我看到支持C#都是单纯的说C#是发展趋势啦,是多么的活呀!却那不错一些实际的例子说明C#是如果优越的!
            参考:http://www.xici.net/main.asp?url=/u5509538/d16766886.htm
            http://www.qiuhao.com/Tips10000/13249.htm
            在C#方面
                 作为微软公司最新的一种语言,并且由于它又是Java语言的小翻版,C#引起了广大的关注。
                 人们看上去喜欢一种语言仅仅取决于它是最新的,程序开发者们总是喜欢用最新的工具工作。其它的一些选择使用C#的理由更为具体一些。
                 领导潮流的东西总是无懈可击的
                 “如果我正准备学一门新的语言,我还是应该学C#。”这也许也是你经常听到的言论。那些推理总是这样进行的:“VB6转变到VB.NET变化已经非常大了,以至于它基本上就是一门是新的语言。如果我无论如何打算学习新语言,我想还是学C#吧,因为它是特别为.NET类的库设计的。”
                 这也是我听到过的关于这两方面的最苍白的争论。你也可以同样理直气壮的说,如果我无论如何打算学习新语言,我想还是学VB.NET吧,毕竟它也是一门新的语言。另外,让我们想想为什么VB.NET从其先驱者那里如此激烈地演变到现在的样子:它为了适应.NET类的库而被重新设计了。
            


            IP属地:山东15楼2010-06-19 08:33
            回复
              我是来看楼上的高手在c#里写dim的。。哈哈


              IP属地:北京17楼2010-06-25 16:39
              回复
                • 125.70.153.*
                楼上的大哥应该向微软说去,让他们在C#里也用上dim


                18楼2010-06-29 14:34
                回复
                  哈哈,我用VB.NET 习惯了,不过意思是那个意思,哥们看明白就好


                  IP属地:山东20楼2010-07-10 11:55
                  回复
                    • 124.161.85.*
                    你用了几天c#你就来乱评论、让人笑话多不好。


                    21楼2010-07-24 03:10
                    回复
                      有知道传智播客的杨中科吗?谁有他的.net视频?


                      22楼2010-10-12 09:20
                      回复
                        对一般人而言,语言没有优劣之分,但人有高低之分。语言是无法比较的!比如说我天天用汇编语言写程序。汇编语言有优势,首先他可以完成其他语言不能完成的任务,其次他面向机器,运行速度快。但是他的缺点是显而易见的,一个简单的问题,要写很多很多的代码。你能把他和其他语言比个高低吗?所以说语言不具有可比性,关键还是用它的人能力如何。。。


                        23楼2011-06-13 00:56
                        回复
                          。。。。。。。。。


                          24楼2011-07-24 14:53
                          回复
                            楼主说的极有道理。
                            我两种语言都用过,感觉C#在人性化方面真的完败于VB.NET
                            VB.NET的IDE在CODING的时候,简直就像是个保姆,衣来伸手,饭来张口
                            而C#,用起来极其的痛苦。。。
                            楼主分析的不错,C语言的结构和特性,其实就是因为早期为了节省硬件资源而设计的,在今天已经拖了它的后腿。
                            


                            IP属地:广东25楼2012-04-05 20:49
                            回复