C# 和 VB 有多大相似度?
C#和VB有多大相似性? 先學VB再學C#好不好?
我看的薛神的建議(如何學習程序語言比如C#之類?):薛非(作者) 回復 黃淵博
看來C#這種語言和VB什麼的類似對於懂編程的人來說不難對於不懂的人來說
如何循序漸進始終是個問題薛非(作者) 回復 黃淵博主要是事件驅動和對象兩個概念吧我覺得可以先在界面上只放一兩個控制項(不知道C#是不是這麼叫)然後仔細體會一下理解累事件驅動和對象之後就容易了
說實話,從純粹的程序語言的觀點上來看,VB比C#牛逼多了,而且很多C#大家很喜歡的功能(譬如說dynamic),VB非.net的那個年代都已經具備了。當然VB6還是一個殘廢語言,http://VB.NET才是完整的。http://VB.NET把所有的好東西都繼承了下來,而且做得比C#更激進。要不是因為VB的關鍵字實在太長……
什麼NotInheritable啊,AndAlso和OrElse啊……
自從VB進化到http://VB.NET之後,就把C#幾乎所有的特性全部收過去了,每一次發布新的C#版本的時候其實同時也有http://VB.NET的版本發布。這兩個語言互相借鑒現在已經基本到了不分彼此的程度了,甚至我估計這倆編譯器在Tokenize之後的區別都不大。
http://VB.NET有很多強大的語法功能,但是C#語法更為簡潔,並且可以運算符重載。
所以,先學http://VB.NET當然是可行的,拋開詞法層面的差別,http://VB.NET和C#相似度是非常高的。
但話說回來,.NET Framework主要是C#寫的,C#的開源項目也比http://VB.NET的更多。沒有特別的愛好的話,建議先學C#。C#與http://VB.Net同為.net社會的「一等公民」,兩個語言從功能上講幾乎一樣,只是寫法稍有不同。甚至有代碼轉換工具可以在兩者之間進行變換,變換結果幾乎不用修改即可編譯(如SharpDevelop自帶的轉換工具)
先帖一篇文章,wikipedia的。Comparison of C Sharp and Visual Basic .NET
VB是指現代的.net下的http://VB.net吧。這兩個語言都作為.net的語言,所以類庫是一樣的。比如在C#和VB裡面寫到console都可以用Console.WriteLine函數。語法上,兩者也是很相似的,比如他們的對象都是基於引用的堆對象,然後都有垃圾回收。相比同為.net語言的C++他們的差別要小很多。比如C++允許混用.net對象和傳統的棧對象,兩種模式可以編譯出純.net類庫或者混合類庫等。F#我不熟悉,不過它函數式的出身導致語法上的差別相比VB和C#的差別要大得多。C#的語法特性在VB中基本都有對應。比如:都有類,interface,namespace, for循環,if語句,甚至高級的語言特性比如Linq和Async/await. 當然也有一些VB才有的特性,不過可以說無傷大雅。具體可以參考上面那個Wiki.
但兩者的代碼看起來還是很不一樣的,不過這個可以認為只是風格不同而已。
用MSDN上Console.WriteLine的例子來體會一下吧Console.WriteLine 方法 (Boolean) (System),VB代碼是:Module Example
Public Sub Main()
Assign 10 random integers to an array.
Dim rnd As New Random()
Dim numbers(9) As Integer
For ctr As Integer = 0 To numbers.GetUpperBound(0)
numbers(ctr) = rnd.Next
Next
Determine whether the numbers are even or odd.
For Each number In numbers
Dim even As Boolean = (number mod 2 = 0)
Console.WriteLine("Is {0} even:", number)
Console.WriteLine(even)
Console.WriteLine()
Next
End Sub
End Module
而C#是:
using System;
public class Example
{
public static void Main()
{
// Assign 10 random integers to an array.
Random rnd = new Random();
int[] numbers = new int[10];
for (int ctr = 0; ctr &<= numbers.GetUpperBound(0); ctr++)
numbers[ctr] = rnd.Next();
// Determine whether the numbers are even or odd.
foreach (var number in numbers) {
bool even = (number % 2 == 0);
Console.WriteLine("Is {0} even:", number);
Console.WriteLine(even);
Console.WriteLine();
}
}
}
然後說學習難度,其實這兩個是觸類旁通的。不過C#的語言排名似乎比http://VB.net要高。所以兩者可選的話我還是推薦C#. 其中也包括它的C系語法,以後學C/C++/Java都會有一種熟悉感。(Javascript也會有熟悉感……不過它和其他幾個靜態編譯的語言還是很不一樣。)以下是推測,不過我覺得依舊迷戀VB的可能更多是以前用VB6或者VBA的用戶,由於語法相似這個對他們來說學習曲線要小很多。
如果學多了以後,會發現語言不會是太大的問題,多寫自然就熟悉了。一般會有幾個最喜歡用的語言,這些語言不用網上搜就能流暢地寫出很多程序來。然後其他語言就會有更多地被打斷,搜索。
主要是事件驅動和對象兩個概念吧
我覺得可以先在界面上只放一兩個控制項(不知道C#是不是這麼叫)然後仔細體會一下理解累事件驅動和對象之後就容易了
回去看了一下原帖,如何學習程序語言比如C#之類?發現你們的課程設置很不合理。事件和控制項都是UI層面地概念,更準確的說是類庫提供的概念,而不是語言層面的。一上來應該學點基礎而不是直接上UI編程。推薦你看一點基礎的書,比如:
CLR via C#(第3版)不知道有沒有更好的入門書……我以前用過java,然後網頁上搜了一下學會的,後來看了這本覺得還不錯但不知道是不是適合初學。得了吧,你聽一個壓根不會C#的假大神@薛非建議,就已經在編程的道路上走錯一步了。就如同你學C語言卻選了譚浩強的書一樣!
估計@薛非以及題主,及其它大部分編程新手,都只知道 VB 6.0呢還,除了計算機二級那點VB6基礎,其它的都不熟悉。 薛神說的相似,估計就是指C#和VB一樣,拖拖控制項就能編程了。這種理解實在大錯,正是這種膚淺的理解造就了.NET程序員只會拖控制項的惡名。
我不建議先學VB6再學C#,也不建議先學http://VB.NET再學C#,如果你不是語言控,就不要多走這彎路。如果你以前學過VB6,我說那點經驗對你學C#沒有多大幫助。尤其不能一直停留在VB6裡面只知道拖控制項編程的Level。
雖然先做GUI可能比較有成就感,但說實話以我的經驗,這種學習途徑容易使你形成一種浮躁的心理,遇到稍抽象的程序就不耐煩了。
Try the hard way!我覺得VB是最適合新手學習編程的第一門語言,沒有複雜的語法,幾行代碼就可以寫出不錯的圖形程序,比python或者java之類的直觀許多,不過這貨書上說是面向對象,其實是個坑,不完整,學習了VB之後可以進階學習.net的開發
c#和http://vb.net都是.net freamwork之上的最重要的兩個語言。c#的語法承接自c系列,自然有大量的擁躉。但經過微軟的努力,http://vb.net在底層和功能上與c#基本沒有區別。而那些以前對vb有意見的程序員,自然想當然地認為http://vb.net也是。常見的偏見比如,不完整的面向對象。
我不是專業程序員出身,但對編程非常感興趣。對我來說,http://vb.net語法風格更接近自然需要,只要你有點英語基礎,就能很快理解和上手。而c系列的語言充斥著各種長相相同的花括弧,有的人裝起逼來連回車都不打一下,完全沒有看下去的慾望。
在強大的vs的幫助下,http://vb.net超長的關鍵字基本上不是問題,只要你敲幾個字母就會自動不全。而那些c系列程序員也經常藉此攻擊http://vb.net,來凸顯自己莫名其妙的優越感。
http://vb.net對初學者很友好,c#的語法風格更加裝逼一點。但兩者都是微軟的親兒子,沒有特別的差異。
還有一點要說一下。現在python很流行,其中很重要的原因就是非常重視和自然語言的對接,比http://vb.net還易懂,使用回車和縮進來寫程序。
所以,那些攻擊http://vb.net語法不夠裝逼的人可以歇歇了。
由於有大量牛人從c系列轉戰c#,所以網上關於c#的幫助肯定是多於http://vb.net的。
如果真的想干牛逼的編程,請學c語言和彙編。除此之外,踩http://vb.net捧c#的人都沒必要理會。
關於c#和http://vb.net兩者語法的區別,百度一大把,別人總結的很好。我就不費這個時間打字了。http://vb.net和c# 類庫上相同而已
從語法來講 還是c#跟java更相似- -其實c#是非常乾淨優雅的語言,vb基本也是但用地不多,沒有java和c#常用。另外有很多偽從業者連語言和ide都分不清楚,很容易誤導初學者。最後回答問題,都很容易上手,但要熟悉類庫需要幾周時間,了解基本best practise幾個月,理解設計理念需要五年以上經驗。沒必要為了一個而先學另外一個。
如果是非計算機專業的建議先學vb後學其他語言,因為現在大家都在用微軟的操作系統;再有編寫大工程需要聯網的程序還是c語言或是java類的語言方便快捷
推薦閱讀:
※學 ASP.NET 的話是 VB.NET 好還是 C# 好?
※這是什麼VB病毒?
※VB中ptivate sub中sub什麼意思?
TAG:編程語言 | VisualBasic | C# |