转至繁体中文版     | 网站首页 | 图文教程 | 资源下载 | 站长博客 | 图片素材 | 武汉seo | 武汉网站优化 | 
最新公告:     敏韬网|教学资源学习资料永久免费分享站!  [mintao  2008年9月2日]        
您现在的位置: 学习笔记 >> 图文教程 >> 软件开发 >> VB.NET程序 >> 正文
C#与vb.net的区别         ★★★★

C#与vb.net的区别

作者:闵涛 文章来源:闵涛的学习笔记 点击数:1722 更新时间:2009/4/23 19:00:36

都说在.NET里,.NET framework和CLR是应用运行的基础。那么VB.NET和C#是不是就完全一样,只是语法不同吗?

一、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<11;i++) {
// for loop
}
另外Visual Basic 对大小写不敏感,而C#是大小写敏感的。

2.C# 具有但 Visual Basic 不具有的特性
           指针, 移位操作符, 内嵌的文档(XML)
          重载操作符

3.Visual Basic具有但 C# 不具有的特性

更丰富的语法: Events, Try…Catch, Select…Case, 实现 Interface
后期绑定(Late binding), 动态数组, 模块(modules), 可选参数, 参数属性(parameterized properties)
后台编译

C#与VB.net间移植的技巧

按理说,这两种语言没有什么移植的必要,因为他们生成的代码可以完全通用。但是如果一个工程基本上是VB写成的,却需要少许已经存在的C#过程,用组件并不是一种效率很高的办法。就算是学习C#或VB,学会他们之间的移植可以双倍的利用已经存在的代码(如好玩的Donkey.net就只有VB版)。 
   
  有人比较过这两种语言,得出的结论是他们很相似。但即便是这样,VB初学者看到诸如((Button)sender).Text = “启动”;之类的语法不知道如何移植到VB,而C#初学者看到Handles Button1.Click等语法也会为移植而感到头痛。下面就看看他们最难移植的部分: 
   
  1、Option语句。VB的Option语句可以打开或关闭变量声明检查和类型转换检查。尤其是Option Strict被关闭后,VB变成弱类型语言,很多类型转换都是自动的,移植到C#中会产生无数错误。因此,如果要将带有Option Strict Off语句的VB程序移植到C#,最好先在VB中将Option Strict打开,然后把所有类型转换出错的地方变成强类型转换,然后再进行移植。 
   
  2、类型转换。VB提供了很多类型转换函数型运算符,如CInt(), CSng(), CStr()等,在C#中只要用(int) , (float), (String)即可。然而如果不是标准类型,如下面的C#语句: 
   
  ((System.Button)sender).Text = “启动”; 
   
  就要使用VB的函数型运算符CType来实现。上面的代码正确的移植方法是: 
   
  CType(sender, System.Button).Text = “启动” 
   
  千万不要使用某些人推荐的,将Option Strict关闭,然后用后期绑定调用sender对象的方法,这根本不符合程序移植不能改变本质的要求。 
   
  3、修饰符和属性标签。VB和C#的修饰符是完全对等存在的,但是拼写往往不同,给移植带来了很多麻烦,尤其是表示相同意思的关键字从字面理解完全不同的时候。下面就给出了VB和C#对应的关键字: 
   
  VB 
   C# 
   VB 
   C# 
   
  Inherits 
   : 
   Implements 
   : 
   
  MustInherit 
   abstract 
   NotInheritable 
   sealed 
   
  Overridable 
   virtual 
   NotOverridable 
   sealed 
   
  MustOverride 
   abstract 
   Overrides 
   override 
   
  [Overloads] 
   无 
   Shadows 
   new 
   
  Shared 
   static 
   Public 
   public 
   
  Protected 
   protected 
   Friend 
   internal 
   
  Protected Friend 
   protected internal 
   Private 
   private 
   
  Static 
   用别的方法实现 
   ByVal 
   无 
   
  ByRef 
   ref 
   Optional 
   无 
   
  ParamArray 
   params 
   无法实现 
   unsafe 
   
  无法实现 
   fixed 
   
   
  可以看出,VB的关键字比较长,而且使用上也比C#更加严格。从C#向VB移植的时候,要分外注意哪些VB有而C#没有的关键字以及在C#拼写相同,在VB中拼写不同的关键字(如MustOverride和MustInherit)。有些关键字如unsafe,如果C#使用了他们,将无法移植到VB中。好在这些关键字在商业应用中并不常用。 
   
  属性标签在这两种语言中非常的相似,移植上应该没有任何难度,只要知道在C#中用方括号[]表示属性标签,而在VB中用的是尖括号<>。另外,如果要用名称结合传递参数,C#直接使用=号,而VB使用:=(冒号和等号)。 
   
  4、委派类型。委派类型就是安全的函数指针类型。在C#中,难以分辨是函数指针在工作还是函数本身在工作,因为他们的语法相同。当要为一个委派类型的变量复制的时候,直接等于一个函数即可,如: 
   
  public delegate void FuncType(Object e) 
   
  ... 
   
  FuncType func; 
   
  func = new FuncType(this.SampleFunction1); 
   
  //调用 
   
  func(something); 
   
  //换指向另外一个函数 
   
  func = this.SampleFunction2 
   
  然而VB中,委派类型就像是一般的对象,有它的方法,与函数本身明显不同。你不能将过程的名字直接赋给一个委派类型的对象,而必须使用AddressOf运算符,下面的例子就是上文C#程序的VB版,注意那些实现不同的地方: 
   
  Public Delegate Sub FuncType(ByVal e As Object) 
   
  ... 
   
  Dim func As FuncType 
   
  func = New FuncType(AddressOf Me.SampleFunc1) 
   
  ‘ 调用 
   
  func.Invoke(something) 
   
  ‘ 换指向另外一个函数 
   
  func = AddressOf Me.SampleFunction2 
   
  5、事件处理。这是两种语言最大的差别之一,VB传承以前版本强大的事件处理机制,许多语法都比C#更加灵活。好在无论什么情况,他们之间都是可以互相移植的。 
   
  对于事件定义,两种语言都是一个委派类型加一个事件属性,如: 
   
  [C#] 
   
  public delegate void MyEventHandler(Object sender, EventArgs e); 
   
  public event MyEventHandler MyEvent; 
   
  [Visual Basic] 
   
  Public Delegate Sub MyEventHandler(ByVal sender As Object, ByVal e As EventArgs) 
   
  Public Event MyEvent As MyEventHandler 
   
  VB还支持另外一种更加紧凑的定义方法,只有一条语句: 
   
  Public Event MyEvent(ByVal sender As Object, ByVal e As EventArgs) 
   
  移植的时候,要把参数部分分离出来,成为一个委派类型,再按照普通方法定义事件即可。 
   
  关于事件响应,C#与Delphi等语言一样,是动态绑定事件过程的,其语法类似于下: 
   
  internal MyClass myobj; 
   
  ... 
   
  myobj = new MyClass(); 
   
  ... 
   
  myobj.MyEvent += this.myobj_MyEvent; 
   
  ... 
   
  protected void myobj_MyEvent(Object sender, EventArgs e) 
   
  { 
   
   //语句 
   
  } 
   
  可以看到,C#是利用运算符连接事件过程和事件属性的。之后,还可以用-=运算符解除事件过程与事件属性的绑定。VB不支持运算符重载,但仍然支持这种动态绑定的事件过程,方法是使用AddHandler和RemoveHandler关键字。如上面黑体部分可以移植为: 
   
  AddHandler myobj.MyEvent, AddressOf Me.myobj_MyEvent 
   
  解除绑定的语法与此类似,只是关键字为RemoveHandler而已。一定不要忘记过程前面还有一个AddressOf关键字! 
   
  动态绑定的事件过程工作起来比较慢,VB支持一种更快的静态绑定事件过程。一旦为对象设置了静态的事件过程,就不能解除绑定,一般大多数情况都是如此。语法如下: 
   
  ‘ 定义变量时使用WithEvents关键字 
   
  Friend WithEvents myobj As MyClass 
   
  ‘ 直接书写事件过程,注意Handles的语法: 
   
  Protected Sub myobj_MyEvent(ByVal sender As Object, ByVal e As EventArgs) _ 
   
  Handles myobj.MyEvent 
   
   ‘ 语句 
   
  End Sub 
   
  它表示myobj_MyEvent这个过程仅仅响应myobj.MyEvent这个过程。如果一个过程要响应很多个事件,把他们列在Handles后面,用逗号隔开,如Handles Event1, Event2, ... 
   
  遇到这种情况,要看清Handles后面的所有对象和事件,将它们一一改写成动态绑定的语句: 
   
  Protected Sub XXX(...)&n

[1] [2]  下一页


[VB.NET程序]C#和VB.NET的区别  [VB.NET程序]Public与Private的区别
[VB.NET程序]0、(空字串)、Null、Empty、与 Nothing 的区别  [网页制作]搞定CSS SPAN和DIV的区别
[网页制作]简明教程 SPAN和DIV的区别  [网页制作]CSS样式表中SPAN和DIV的区别
[Web开发]setTimeout 和 setInterval 的区别  [Web开发]网页设计中JS与Java的区别
[Web开发]回答XML与HTML的区别  [JAVA开发]详细解析 JavaBeans 与 Ejb 的区别
教程录入:mintao    责任编辑:mintao 
  • 上一篇教程:

  • 下一篇教程:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      注:本站部分文章源于互联网,版权归原作者所有!如有侵权,请原作者与本站联系,本站将立即删除! 本站文章除特别注明外均可转载,但需注明出处! [MinTao学以致用网]
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)

    同类栏目
    · C语言系列  · VB.NET程序
    · JAVA开发  · Delphi程序
    · 脚本语言
    更多内容
    热门推荐 更多内容
  • 没有教程
  • 赞助链接
    更多内容
    闵涛博文 更多关于武汉SEO的内容
    500 - 内部服务器错误。

    500 - 内部服务器错误。

    您查找的资源存在问题,因而无法显示。

    | 设为首页 |加入收藏 | 联系站长 | 友情链接 | 版权申明 | 广告服务
    MinTao学以致用网

    Copyright @ 2007-2012 敏韬网(敏而好学,文韬武略--MinTao.Net)(学习笔记) Inc All Rights Reserved.
    闵涛 投放广告、内容合作请Q我! E_mail:admin@mintao.net(欢迎提供学习资源)

    站长:MinTao ICP备案号:鄂ICP备11006601号-18

    闵涛站盟:医药大全-武穴网A打造BCD……
    咸宁网络警察报警平台