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