如何從C++過渡到C#?

我是一個C++程序員,前不久,通過一個項目認識到C#的開發效率實在是高,用來做一些業務邏輯比較複雜的項目還是很適合的,所以想熟悉了解一下,不知道有沒有什麼簡要的資料推薦?謝謝


舉一個比較重要的差異點:C# 的類型分為引用類型(reference type)和值類型(value type)。自定義類型時,class 為引用類型,struct 為值類型。這區別在賦值及傳遞參數時最為明顯。


《深入理解C#》(C# in depth)這本書入門挺方便的

然後注意一下C#的引用類型和值類型,我見過C++程序員轉C#之後函數參數都用ref標記的,沒必要


不需要過度,也最好不要過度,過度只會讓後面的深入學習變得困難。這就如同 Java 過度到 JavaScript 一樣,只有幾個表面的 API 一樣,一旦你開始理解語言的本質你就會發現兩門語言其實完全不一樣,你要照搬概念反而理解不了新的語言。

找本你看得順眼的 C# 入門書,把基本概念的 API 學一下,接著以實際項目驅動實踐和學習。不要去搬 C++ 的概念,因為這些概念的底層實現方式可能完全不一樣,保持開放的心態去學習就好。


下載一個vs就OK了……

別的,隨便做個東西你就知道什麼回事了。


對我來說整個過程最難的地方是裝系統,C#本身其實也就那樣,隨便看看也就能寫程序了,寫出來的程序談不上多好但規規矩矩的寫也不會太爛,無非就是滿屏大寫字母眼睛需要適應一下。

VS2017連個離線安裝的iso都沒有,什麼都要從網上現下載,慢死……


C++和C#的差別實在是太大了,只有風格是相似的,建議作為一門新的語言來學習。C#和Java非常像,因為當年微軟就是拿來與Java競爭的。如果你對Java比較熟悉,那麼你只需要了解一下類庫里常用的工具就好。


我最早讀的是O"Reilly的《Programming C#》(10年前),現在看來還是很不錯

幾點建議

  • 一開始學無需把C#語言的每個細節都弄清楚。知道怎麼調最常見的API就可以做事,其餘的慢慢學

  • .NET API集里除了最核心的System、System.Collections、http://System.IO、System.Threading,第二重要的是Winform API。其餘的可以慢慢學
  • 有了基礎以後,MSDN是最好的文檔


還沒上大學的時候,高三暑假,跑到家那邊的圖書城想買傳說中的C++的書,然後看到一本C#,我一看,嘿,這個++還寫得挺藝術的,重疊起來了,於是把C#買了回來……

昵圖網.jpg


裝個resharper,注意所有警告,可以方便你快速了解語法


認識差異性就好了,這兩個語言雖然不同,但又不是完全不同,懂得哪裡有差異就好了。當然別把自己的C++轉沒了就好了


C++程序員如果要用C#的話,還是很容易上手的,可能就是有的庫搜搜看看怎麼用,特別如果不用做界面的話。

不過要真正用的好的話,感覺像lambda(雖然C++也有了),delegate,event,LINQ,反射,yield(我還是在用了python之後才真正理解為什麼會有這個關鍵字)等等這些特性,還是要在用的時候慢慢去了解。還是要多看看比較成熟的代碼看看別人是怎麼做的。


可能這個過渡就是從C++思維過渡到C#思維。

有時候換一個新東西用的時候,總不免把新舊兩個東西在細節上做對比。++細節較多,而#直接在語法層面解決了。

(簡單舉例)C++更像手動擋的車,而C#就是自動擋。

補充一句:

長時間用C++的人,拿到C#時總會對一些C#的特性刨根問底,總想看看是如何實現的,看看實現方式是不是跟自己預想的一樣。

不知道就我一人醬,還是通病


多看代碼多寫代碼

都寫c艹了難道github沒用過么?


找個.NET的軟體開發項目做做就入門了呀,還能有什麼比工程實踐更快熟悉呢


熟悉C++的學C#很簡單, 反過來則難了很多.

之前用C++寫遊戲那真是步步驚心,現在C#寫Unity感覺幸福了很多,很多細節都拋給機器去做了.

C#你最需要注意的就是引用類型和值類型的區別, 注意重要資源資源的釋放(比如事件監聽, 大內存, 系統級對象等, 沒有了析構函數,這個地方反而麻煩了), 別的都很容易.


推c++ via cs


建議你直接用C++/CLI。等你dotNet framework熟悉了,反射特性熟悉了,再用C#就是手到擒來的事情。


msdn c#編程指南


我就是從C艹過度到C#的。

千萬不要過度,要從0開始學,千萬不要過度,要從0開始學,千萬不要過度,要從0開始學!

重要的事情說三遍。把C#當C++寫是一件很蠢的事,我用了一年多才意識到這點。C++啥都要自己造,而C#,基本不需要實現啥底層,兩者編程思路就是完全不一樣的。


推薦閱讀:

完成一個Scheme解釋器需要哪些知識?實現各功能都有哪些東西需要理解?
既然 Lisp 以及基於此的語言好到不行,為什麼基於 C 的語言一經問世便佔據統治地位?
既然 TeX 語法這麼爛,為什麼不用 Python 把 TeX 重寫一遍?
如何評價 C++11 的右值引用(Rvalue reference)特性?
零基礎(轉行)能學unity3d嗎?

TAG:編程語言 | 編程 | C# |