C#與C++對比總結之一,轉
C#與C++對比總結之一
by Minghui Li
1. 常量總是靜態(tài)的,不必也不允許使用static
2. C#中的引用。C#中非內置類(lèi)型或者自定的Class,都是引用類(lèi)型,要創(chuàng )建這樣的對象必須使用new,和C++有區別。
3. C#中的輸出語(yǔ)句:console.WriteLine(…);
4. string類(lèi)型:它雖然也是引用類(lèi)型,但是和普通的引用類(lèi)型有區別。如果兩個(gè)string對象指向相同的內存,當修改其中一個(gè)string,那么回創(chuàng )建一個(gè)全新的string,而另一個(gè)string不會(huì )發(fā)生變化。
5. @的作用:C#中采用和C/C++中相同的轉義字符,比較麻煩,可以在字符串前面加上@,表示字符串中的所有字符都看作是其原來(lái)的含義,如:@”C:\ProCShap\First.cs”
6. C#中的if語(yǔ)句中的條件必須是bool值,不能像C++中可以是整形
7. C#中有一種特殊的循環(huán):foreach
8. C#中的枚舉類(lèi)型和C/C++中的也有區別:訪(fǎng)問(wèn)枚舉值的時(shí)候需要采用成員訪(fǎng)問(wèn)的方式。另外可以獲得枚舉值的字符串表示(ToString),也可以從字符串獲得枚舉值(Enum.Parse())。
9. C#中數組的聲明和C++中的有區別:
§ Int[] intergers; // C#
§ Int intergers[]; // C++
10. C#中數組的初始化和C++中的區別:
§ Int[] intergers = new int[32]; // C#
§ Int intergers[32]; // C++
11. C#中的所有數組類(lèi)型都是引用類(lèi)型,和C++中的類(lèi)似,因為C++中的數組類(lèi)似一個(gè)指針。
12. C#的主程序入口:Main函數,其必須使類(lèi)或者結構的靜態(tài)成員函數。
13. 控制臺IO:
§ Console.Read()
§ Console.ReadLine()
§ Console.Write()
§ Console.WriteLine()
§ C#可以像C一樣格式化輸出
14. C#中的預處理器指令比C++的強大
15. 函數參數的問(wèn)題:
§ 當函數的參數是一個(gè)引用類(lèi)型
§ 當函數的參數是一個(gè)值類(lèi)型,但想讓其像引用類(lèi)型一樣工作,需要使用ref關(guān)鍵字聲明該函數(類(lèi)似于C++中的&語(yǔ)法):
Void SomeFunc(ref int i);
調用函數時(shí),該參數也要使用ref關(guān)鍵字(不同于C++):
SomeFunc( ref i );
§ out關(guān)鍵字:作為輸出參數,被引用的變量不需要被初始化。使用方法同ref。
16. C#不支持默認參數,不同于C++。
17. 類(lèi)中數據成員的默認初始化值為0或者false。不同于C++的隨機初始化。
18. 如果提供了帶參數的構造函數,編譯器不會(huì )自動(dòng)生成默認構造函數。
19. 靜態(tài)構造函數:C#中特有的,只執行一次,不能有參數,主要目的是為靜態(tài)字段或者屬性初始化。.net沒(méi)有確保類(lèi)的靜態(tài)構造函數何時(shí)執行,但一般是在第一次調用類(lèi)的成員之前執行。可以與無(wú)參數的實(shí)例構造函數共存。
20. 構造函數初始化器,類(lèi)似于C++中的初始化列表,但有很大區別。C#的構造函數初始化器只能調用其它的構造函數(如this,或者base),而C++的可以初始化數據成員。
21. C#的只讀字段
§ 是用readonly關(guān)鍵字修飾的字段。C++中沒(méi)有。
§ 只讀字段不同于const字段,只讀字段可以是實(shí)例字段,可以在實(shí)例初始化函數中初始化賦值,而在其它任何函數中不能改變。
§ 當然只讀字段也可以是靜態(tài)字段。
22. C#中的結構不同于C++。
§ C++中的結構和類(lèi)時(shí)等同的。
§ C#中的結構是值類(lèi)型的,一般是比較小的數據結構,存儲在棧中。但是可以使用new運算符。
§ C#中的結構不支持繼承。
§ 不允許定義無(wú)參數的構造函數,其是編譯器默認提供的,不允許被覆蓋。
23. System.Object中的方法:(感覺(jué)比較有用,但還不知道具體怎么使用?)
§ string ToString( )
§ Int GetHashTable()
§ Bool Equal(object obj) // 比較兩個(gè)對象是否相等
§ Bool Equal(object objA, object objB) // 同上
§ Bool ReferenceEquals(object objA, object objB)//比較兩個(gè)引用是否指向同一個(gè)對象
§ Type GetType() // 得到對象類(lèi)型的詳細信息
§ Object MemberwiseClone() // 進(jìn)行對象的淺表復制???
§ Void Finalize() // .net版本的析構函數