C# 是三大主流OOP(面向?qū)ο缶幊蹋┱Z言(Java抄邀, C++掠兄,C#)之一,是最新的一種剂癌,必然借鑒了其他兩者的長處淤翔。三者有太多的共性精一而通其三。
OOP:Object Oriented Programming
1. 不能直接操作內(nèi)存
C#是運(yùn)行在虛擬機(jī)中的元指令珍手。出于安全性考慮办铡,沒有指針,不能直接操作內(nèi)存琳要,自動實現(xiàn)內(nèi)存管理寡具。 C#中實現(xiàn)自動垃圾回收,通過new在堆中創(chuàng)建對象稚补,當(dāng)對該對象的引用計數(shù)為0時回收內(nèi)存童叠。類有構(gòu)造函數(shù)而沒有析構(gòu)函數(shù)。
- C#沒有指針概念课幕,只有引用和數(shù)值之分厦坛。
- int等內(nèi)部數(shù)據(jù)類型和struct定義的類型是數(shù)據(jù)類型,拷貝時做深度拷貝
- string和用class定義的類型是引用類型乍惊,拷貝時做淺拷貝
深拷貝和淺拷貝:深拷貝新建內(nèi)存地址杜秸,改變原值時新值不改變;淺拷貝共用內(nèi)存地址润绎,是引用撬碟。
C#為彌補(bǔ)沒有指針诞挨,相比之下就需要引進(jìn)很多新的機(jī)制。比如C#的參數(shù)傳遞分為傳值和傳址呢蛤,傳址時需要加ref或者out關(guān)鍵字惶傻。
2. 徹底地面向?qū)ο缶幊?/h2>
C#的OO(Object Oriented)特性更為徹底,不存在獨(dú)立的函數(shù)其障。程序的入口Main()函數(shù)是某個對象的public static 成員函數(shù)银室。
C#的所有對象都是由Object派生而來,包括內(nèi)部數(shù)據(jù)類型int, float, string等励翼。C#中不存在模板蜈敢,通過將參數(shù)設(shè)置為Object類型來實現(xiàn)類似的功能。
C#沒有頭文件抚笔,變量扶认、函數(shù)和類沒有定義和聲明的區(qū)別侨拦。都在一起殊橙。只能通過設(shè)計抽象類的方式實現(xiàn)代碼分離。
C#中在類中的成員變量聲明處即可初始化狱从,而C++不行膨蛮。C#中的靜態(tài)成員變量可以在靜態(tài)構(gòu)造函數(shù)中初始化,而靜態(tài)構(gòu)造函數(shù)是在該類的第一次使用時調(diào)用季研。
3. foreach語句
C#的語法中多了foreach(typevinlist)statement 語句敞葛;而C++則需要使用標(biāo)準(zhǔn)庫的函數(shù)
C#與C++相比較,更加復(fù)雜和雜亂与涡。