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