Visual Basic與C#技巧比較
發(fā)表時(shí)間:2023-08-07 來(lái)源:明輝站整理相關(guān)軟件相關(guān)文章人氣:
[摘要]首先聲明,此處僅作語(yǔ)言方面的對(duì)比,在.NET生產(chǎn)力上,兩者沒(méi)有區(qū)別。進(jìn)行這個(gè)對(duì)比是為了澄清對(duì)Visual Basic和C#功能錯(cuò)誤的認(rèn)識(shí)和流言。以下所有區(qū)別都是經(jīng)過(guò)較為深刻的研究得出的,相比一些常見(jiàn)...
首先聲明,此處僅作語(yǔ)言方面的對(duì)比,在.NET生產(chǎn)力上,兩者沒(méi)有區(qū)別。進(jìn)行這個(gè)對(duì)比是為了澄清對(duì)Visual Basic和C#功能錯(cuò)誤的認(rèn)識(shí)和流言。以下所有區(qū)別都是經(jīng)過(guò)較為深刻的研究得出的,相比一些常見(jiàn)的對(duì)比來(lái)講更有科學(xué)性
下面先對(duì)比Visual Studio .NET 2003中,兩種語(yǔ)言功能的對(duì)比。*表示對(duì)方語(yǔ)言中沒(méi)有這項(xiàng)功能,但是可以用別的語(yǔ)法在IL級(jí)別實(shí)現(xiàn)完全同樣的功能。注意,本次比較只選擇有意義的功能,某些功能,如循環(huán)、分支語(yǔ)句等傳統(tǒng)功能不在比較之列。同時(shí),VB因兼容老版本而遺留的,不具有現(xiàn)代語(yǔ)言特征的語(yǔ)法也不在比較之列(如On Error語(yǔ)句,Option Explicit語(yǔ)句等)。
Visual Basic有而C#沒(méi)有的功能
C#有而Visual Basic沒(méi)有的功能
局部static變量*
WithEvents和Handles語(yǔ)法*
可選參數(shù)
按名傳遞
屬性參數(shù)
按非虛方式訪問(wèn)一個(gè)虛函數(shù)
換名實(shí)現(xiàn)接口
后期綁定
With語(yǔ)句*
用Imports導(dǎo)入靜態(tài)成員
模塊
Is操作符*
Try…Catch When語(yǔ)句
Visual Basic運(yùn)行時(shí)庫(kù)的功能和函數(shù)
運(yùn)算符重載
為event指定add與remove訪問(wèn)器
using語(yǔ)句*
XML注釋文檔
不安全代碼和指針
as操作符
out修飾符*
編譯器CLS檢查
接下來(lái),是未來(lái)Visual Studio 2005中兩者功能的對(duì)比。在這個(gè)對(duì)比中,所有因Visual Studio 2005新增功能產(chǎn)生的差異,將以粗體字表示。注意,并不是每一項(xiàng)新增功能都能產(chǎn)生兩者的差異,比如泛型和Partial Type都是兩者皆有的新功能。
Visual Basic有而C#沒(méi)有的功能
C#有而Visual Basic沒(méi)有的功能
局部static變量*
WithEvents和Handles語(yǔ)法*
可選參數(shù)
按名傳遞
屬性參數(shù)
按非虛方式訪問(wèn)一個(gè)虛函數(shù)
換名實(shí)現(xiàn)接口
后期綁定
With語(yǔ)句*
用Imports導(dǎo)入靜態(tài)成員
Is操作符*
Try…Catch When語(yǔ)句
Visual Basic運(yùn)行時(shí)庫(kù)的功能和函數(shù)
默認(rèn)實(shí)例
My命名空間
為event指定add與remove訪問(wèn)器
不安全代碼和指針
out修飾符*
迭代器
匿名方法
可見(jiàn)無(wú)論什么版本的對(duì)比,都是Visual Basic的功能比較多。當(dāng)然,僅憑功能的多少,不能改變個(gè)人對(duì)語(yǔ)言的喜好,也不大可能成為選擇開(kāi)發(fā)工具的依據(jù)。但是有一句話給我的印象很深,我在CSDN上做調(diào)查時(shí),有一個(gè)人說(shuō)他用C#的理由是:“我用C#是因?yàn)镃#比VB功能強(qiáng),哪怕只是一點(diǎn)點(diǎn)也是強(qiáng)”。即使VB比較強(qiáng),還是會(huì)有人這么說(shuō)。這就說(shuō)明語(yǔ)言或開(kāi)發(fā)工具的歧視不是功能差異造成的,那真正的原因