C#是三大主流OOP(面向?qū)ο缶幊?語(yǔ)言(C++,Java,C#)之一,它與C之間的一些差別。
C語(yǔ)言誕生得非常之早,C語(yǔ)言的目標(biāo)就是比匯編方便易用,同時(shí)不要損失匯編的表達(dá)能力。所以 C 語(yǔ)言可以看成是“高級(jí)的匯編”語(yǔ)言。C語(yǔ)言的源代碼基本上可以非常容易地對(duì)應(yīng)到匯編代碼,而且可以不需要什么運(yùn)行時(shí)環(huán)境的支持。C的特點(diǎn),簡(jiǎn)單容易編譯,靈活貼近底層。所以一直到現(xiàn)在,一些需要直接和硬件打交道的軟件都還是用 C 語(yǔ)言寫(xiě)的。總之 C 語(yǔ)言編寫(xiě)簡(jiǎn)單,更接近底層,直觀得管理數(shù)據(jù)存儲(chǔ)。
C#語(yǔ)言抽象層次高且基本只有一種(面向?qū)ο蟮模?,運(yùn)行時(shí)支持豐富(垃圾回收等),類(lèi)庫(kù)豐富。所以它就是好學(xué),易用,同時(shí)兼顧運(yùn)行效率,盡量?jī)?yōu)化。C# 與 Java 類(lèi)似,編譯后得到的還不是機(jī)器代碼,而是運(yùn)行在虛擬機(jī)中的元指令。它對(duì)安全性做了更多的考慮,沒(méi)有指針,不能直接操作內(nèi)存,自動(dòng)實(shí)現(xiàn)內(nèi)存管理。
最直觀的區(qū)別就是:C# 沒(méi)有指針類(lèi)型,內(nèi)存自動(dòng)管理;C# 有字符串類(lèi)型,C 語(yǔ)言沒(méi)有,靠字符數(shù)組或指針來(lái)存字符串;C# 中 switch 后可跟 string 類(lèi)型,并且會(huì)禁止所有 switch..case 語(yǔ)句的失敗情形,除非 case 語(yǔ)句后是空格,否則執(zhí)行了前一個(gè)case語(yǔ)句就算沒(méi)有 break 也會(huì)停止執(zhí)行后面的 case 語(yǔ)句; C# 中定義數(shù)組時(shí),數(shù)組長(zhǎng)度可以是變量 ,而 C 語(yǔ)言中定義時(shí)數(shù)組長(zhǎng)度只能是一個(gè)常量表達(dá)式,動(dòng)態(tài)分配內(nèi)存需要用到 molla 函數(shù);C 語(yǔ)言中沒(méi)有集合類(lèi)型;C# 有 foreach 可用于數(shù)組和集合的遍歷等。
總的來(lái)說(shuō),C 語(yǔ)言更底層,很多東西都需要自己 DIY,但極其靈活,功能十分強(qiáng)大,其精華在于指針,直接管理數(shù)據(jù)存儲(chǔ),面向過(guò)程編程,很多操作系統(tǒng)和系統(tǒng)軟件都是用 C 語(yǔ)言寫(xiě)的;C# 則更容易上手,很多東西都已經(jīng)寫(xiě)好,直接使用即可,避免了內(nèi)存的直接管理,面向?qū)ο缶幊?;正如一個(gè)冷笑話所講:“C 語(yǔ)言:指針最好用。 C++:最好不用指針。 C#:指針是什么?”
=================================================
一、難易程度的區(qū)別。
c# 屬于 .net framework 中的一個(gè)產(chǎn)品,簡(jiǎn)單易用,但開(kāi)發(fā)出來(lái)的東西目前還需要安裝運(yùn)行庫(kù)才能供別人使用。c 語(yǔ)言是一種古老難用的語(yǔ)言,目前可能在嵌入式系統(tǒng)用的比較多,另外大學(xué)會(huì)有這門(mén)課。相關(guān)的還有 c++,可以做系統(tǒng)的底層開(kāi)發(fā),也不容易掌握。
二、內(nèi)容上的區(qū)別。
C 語(yǔ)言面向過(guò)程,開(kāi)發(fā)非托管程序,編譯成 exe是二進(jìn)制可執(zhí)行文件,不可跨平臺(tái)。C# 面向?qū)ο?開(kāi)發(fā)托管程序,編譯成 exe 是中間語(yǔ)言,需要在 .NET 平臺(tái)上進(jìn)行二次動(dòng)態(tài)編譯,之后才能執(zhí)行,可跨平臺(tái)。
三、特點(diǎn)上的區(qū)別。
C 語(yǔ)言誕生得非常早,當(dāng)時(shí)人們普遍還習(xí)慣用匯編語(yǔ)言編寫(xiě)軟件,而且沒(méi)有什么統(tǒng)一,通用的操作系統(tǒng),基本上軟件都是從0開(kāi)始寫(xiě)的。C# 是一種安全的、穩(wěn)定的、簡(jiǎn)單的、優(yōu)雅的,由 C 和 C++ 衍生出來(lái)的面向?qū)ο蟮木幊陶Z(yǔ)言。它在繼承 C 和 C++ 強(qiáng)大功能的同時(shí)去掉了一些它們的復(fù)雜特性。
===========================================================
C:面向過(guò)程,語(yǔ)法太麻煩,但對(duì)硬件的底層編程和對(duì)內(nèi)存的管理的靈活性方面c是其他高級(jí)語(yǔ)言所不可及的。
C#:純面向?qū)ο蟮模ǜ?java 很像),是 ms .net framework 的主力之一,它的代碼運(yùn)行是安全的,里面沒(méi)有指針和引用,像 java 一樣有垃圾回收機(jī)制。
語(yǔ)法基本沒(méi)有區(qū)別,首先 C# 不必對(duì)指針進(jìn)行太多的研究,然后可遺址性等,其它的區(qū)別相當(dāng)大??梢哉f(shuō)不是一個(gè)方向的。
開(kāi)發(fā)環(huán)境跟開(kāi)發(fā)語(yǔ)言也是兩個(gè)不同的概念
學(xué)習(xí) C# 并不必須有 C 語(yǔ)言的基礎(chǔ),不過(guò),如果你學(xué)過(guò) C 語(yǔ)言,那會(huì)事半功倍的,因?yàn)樗麄冎g有很多語(yǔ)法是一樣的。作為初學(xué)者,并沒(méi)有必要先去學(xué)習(xí) C 語(yǔ)言,你只需要有 C# 的完整的教程就行了。
在這里推薦基本C#好課:C#入門(mén)手冊(cè)、C#微課